rails f.submit检查另一个表

时间:2015-04-25 21:52:59

标签: ruby-on-rails

我理解在form_for中,我能够在我的模型中验证该表格的表格,但是如果我想在另一个表格中验证“f.submit”的数据呢?

具体来说,如果工作人员和电台都存在于他们各自的表中,那么工作人员只能在Checkout模型/表格中结账。

如何将Staff and Radio表格传入我的Checkout验证标准?

谢谢!

2 个答案:

答案 0 :(得分:0)

Rails中的表单实际上并未链接到验证(与Symfony2不同),它们只显示错误消息。

您可以将资源嵌套在fields_for的表单中,这与accepts_nested_attributes_for一起使用。

<%= form_for(@member) do |f| %>
  <%= f.text_field(:name) %>    
  <%= fields_for :avatar, @member.avatar do |avatar_fields| %>
    <%= avatar_fields.text :url %>
  <% end %>
<% end %>

class Member < ActiveRecord::Base
  has_one :avatar
  accepts_nested_attributes_for :avatar
end

您可以为validates_associated的模型关联创建验证,或者在声明关联时传递validates: true。有关详细信息,请参阅this question

class Member < ActiveRecord::Base
  has_one :avatar, validate: true
  accepts_nested_attributes_for :avatar
  # or
  # validates_associated :avatar
end

答案 1 :(得分:0)

听起来你只想在关联上使用状态验证(假设这些模型之间存在关联)。例如,如果您的结帐模型有radio_id和staff_id列,那么您可能有

belongs_to :radio
belongs_to :staff
validates :radio, presence: true
validates :staff, presence: true

如果这还不够,您可以使用validate方法

编写自定义验证方法

课程结帐&lt;的ActiveRecord :: Base的       验证:something_custom

  def something_custom
    # call errors.add to mark the object as invalid 
  end

如果最终经常重复使用,也可以将其包装在验证器模块中。