我的环境
Rails 3.2.1
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]
我想根据提交值更改验证方法。
例如,在以下视图中推送'only_foo'时,我想仅检查'foo'的验证,但是当推''only_bar'时,我想检查'bar'的验证。
<%= from_for(@user, :url => "/hoge/") %>
<%= f.text_field 'foo' %>
<%= f.text_field 'bar' %>
<%= f.submit 'only_foo' %>
<%= f.submit 'only_bar' %>
<% end %>
在用户模型中,我想在validate方法中获取提交值。
validate :foo, :presence => true, :if => :only_foo?
validate :bar, :presence => true, :if => :only_bar?
def only_foo?
# I want to get the commit value, like this.
commit == 'only_foo'
end
def only_bar?
# I want to get the commit value, like this.
commit == 'only_bar'
end
还是有更好的练习吗?
非常感谢提前。
答案 0 :(得分:4)
定义提交按钮时,您可以将名称与其关联
<%= f.submit 'only_foo', name: 'foo' %>
<%= f.submit 'only_bar', name: 'bar' %>
在您的控制器操作中,params[:commit]
将包含与提交相关联的名称。
您可以将其作为虚拟属性(即名称提交)分配给User实例。
即在类模型中有attr_accessor :commit
此外,不确定它是否有帮助,但您可以稍微重构
<强>更新强>
validates :foo, :presence => true, if: ->(u) { u.commit == 'foo'}
validates :bar, :presence => true, if: ->(u) { u.commit == 'bar'}
请告诉我这是否有帮助,或者是否需要进一步阐述
答案 1 :(得分:0)
您可以在.save之前使用旧学校方法运行方法,根据您希望的任何条件检查您要检查的内容。