Ruby on rails 保存前检查用户输入

Ruby on rails 保存前检查用户输入,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,大家好 为了更好地理解而编辑。 第一个模型是库存,在这个模型中我有产品类型、产品名称和用户ID 第二种模式我有由名字、姓氏和密码组成的用户 在我的库存页面上,我有一个表格,用于检查所说的产品类型和产品名称,还有一个供用户输入Pin号码的地方。提交时,它将检查他们输入的Pin码并在用户模型中验证,如果Pin码正确,它将创建一个带有所述产品类型、产品名称和用户ID(从提交的Pin码中提取)的条目 我只是想弄清楚如何验证他们提交的Pin_编号 这就是为什么我认为我必须进行某种验证以及基于该验证的if语

大家好

为了更好地理解而编辑。

第一个模型是库存,在这个模型中我有产品类型、产品名称和用户ID

第二种模式我有由名字、姓氏和密码组成的用户

在我的库存页面上,我有一个表格,用于检查所说的产品类型和产品名称,还有一个供用户输入Pin号码的地方。提交时,它将检查他们输入的Pin码并在用户模型中验证,如果Pin码正确,它将创建一个带有所述产品类型、产品名称和用户ID(从提交的Pin码中提取)的条目

我只是想弄清楚如何验证他们提交的Pin_编号

这就是为什么我认为我必须进行某种验证以及基于该验证的if语句。我不知道该怎么办

我希望这能消除任何困惑

我只是想弄清楚如何验证他们提交的Pin_编号

什么构成有效的
pin_编号
?只是它允许您成功地查找
用户
?如果一个用户输入另一个用户的
密码怎么办?这被认为是“有效的”吗?想一想

如果您能在问题中添加您提交表单时的
params
是什么样子的,这将非常有用。但是,我们可以做一些猜测工作

那么,让我们假设params看起来像:

{..., "inventory"=>{"product_type"=>"foo", "product_name"=>"Bar"}, "pin_number"=>5, ...}
private 

  def inventory_params
    params.require(:inventory).permit(:product_type, :product_name)
  end
在控制器中,您可能会执行以下操作:

if @user = User.find_by(pin_number: params[:pin_number])
  @inventory = Inventory.new(inventory_params)
  @inventory.user = @user
  if @inventory.valid?
    @inventory.save
    # perhaps do some other stuff...
  else 
    # handle the case where the `@inventory` is not valid
  end
else
  # handle the case where the `@user` was not found
end
这假设您有以下情况:

{..., "inventory"=>{"product_type"=>"foo", "product_name"=>"Bar"}, "pin_number"=>5, ...}
private 

  def inventory_params
    params.require(:inventory).permit(:product_type, :product_name)
  end
在您的
Inventory
模型中,您可能希望执行以下操作(很抱歉,我还没有使用Rails 5,因此某些语法可能不正确):

类资源清册

您可能还想考虑在<代码>用户> PixNo.< /代码>上添加索引。如果您将要进行大量的查找。

< P>不确定我是否得到了正确的问题,但听起来像是一个自定义验证器。p> 您可以在“”下的Rails官方文档中了解有关自定义验证器的更多信息


也可以考虑将类移动到定制的验证器中,这将是一个值得关注的问题,这是一个使它可重用的好方法。您可以在和上找到更多信息。

在进行验证之前,您似乎需要一个
回调。您是否有会话控制器,以便了解
当前\u用户
?用户输入PIN实际上就是用户每次想要创建产品时输入的密码吗?请参见编辑的问题。这就是我要找的,我不知道怎么做。但这个例子正是我所想的。非常感谢。很乐意帮忙。另外,你澄清了你的问题,真是太好了——非常有帮助!所以我得到了一个错误。“找不到InventoriesController#create,rendering head:No_content的模板”不确定这是怎么回事,但我还添加了idto@inventory.user=@user.id,应该给我用户id而不是pin码,对吗?我问的原因是因为我想根据pin码获取用户id。在
No template
错误中,您应该发布一个新问题。在第二部分中,您不需要执行
@inventory.user=@user.id
,因为Rails知道如何使用
id
字段,该字段已经基于您的
所属:user
语句。谢谢,我会查看它。