保存前检查用户输入

时间:2017-08-09 20:41:27

标签: ruby-on-rails ruby-on-rails-5

美好的一天!

编辑以便更好地理解。

第一个模型是库存,在此模型中,我有Product_Type,Product_Name和User_ID。

第二个模型我有用户,包括First_Name,Last_Name和Pin_Number。

在我的库存页面上,我有一个表单,用于检出所说的Product_Type和Product_Name,也是用户放置其Pin_Number的地方。在提交时,它将检查他们输入的Pin_Number并在Users模型中验证它如果Pin_Number正确,它将创建一个包含所述Product_Type,Product_Name和User_ID的条目(从提交的Pin_Number中提取。)

我只想弄清楚如何验证他们提交的Pin_Number。

这就是为什么我认为我必须做某种验证和基于该验证的if语句。不确定如何去做。

我希望这可以解决任何困惑。

2 个答案:

答案 0 :(得分:1)

  

我只想弄清楚如何验证他们提交的Pin_Number。

什么构成有效pin_number?只是它可以让你成功查找User?如果用户输入其他用户pin_number怎么办?那被认为是“有效的”吗?需要考虑的事情......

如果您在提交表单时将params的外观添加到您的问题中会很有帮助。但是,我们可以做一些猜测工作。

所以,让我们假设params看起来像:

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

在您的控制器中,您可能会执行以下操作:

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

这假设你有类似的东西:

private 

  def inventory_params
    params.require(:inventory).permit(:product_type, :product_name)
  end

在你的Inventory模型中,你可能想做类似的事情(我道歉,我还没有在Rails 5上,所以一些语法可能不正确):

class Inventory < ActiveRecord::Base 

  validates :user_id,
            :product_type,
            :product_name,
            presence: true

  belongs_to :user

end

你可能还想考虑在User.pin_number上添加一个索引,如果你要通过它做很多的发现。

答案 1 :(得分:0)

不确定我的问题是否正确,但听起来像是我的自定义验证器。

您可以在&#34; Custom Validators&#34;

下的官方Rails文档中了解有关自定义验证器的更多信息

另外,考虑将您构建的自定义验证程序的类移动到关注点,这是使其可重用的好方法。您可以在this StackOverflow questionthis nice tutorial找到更多信息。