Rails 5 的条件验证

Max*_*ant 0 ruby validation ruby-on-rails

我有一个嵌套的表单,我希望验证某些字段,才能选择特定字段。

我的第一个字段是一个单选按钮:

<%= f.radio_button :type_doc, '5' %>
<%= f.radio_button :type_doc, '6' %>
<%= f.radio_button :type_doc, '7' %>
Run Code Online (Sandbox Code Playgroud)

然后(例如)如果我选择类型为“6”的单选按钮,我想要这个

<%= f.text_field :number_doc, :placeholder => 'Number' %>
Run Code Online (Sandbox Code Playgroud)

被填满。

我已经尝试过官方文档中的解释:Rails 活动记录验证

所以,在我的 doc.rb 模型中,我有这个:

validates :number_doc, presence: true, if: :type_6?

def type_6?
  :type_doc == '6'
end 
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我仍然可以选择 :type_doc == 6 并让我的字段 :number_doc 为空。

有任何想法吗 ?谢谢

小智 6

您可以简单地使用 Lambda:

 validates :number_doc, presence: true, if: -> { self.type_doc == '6' }
Run Code Online (Sandbox Code Playgroud)