我有一个MenuTable模型,我想在validate_pressence_of
的消息中使用名称字段,而是名字字段的值,我得到了模型的名称
代码:
class MenuTable < ActiveRecord::Base
validates_presence_of :type, :if => lambda {(field.blank?)}, :message => "Error in " + self.name
end
答案 0 :(得分:2)
如果所有其他方法都失败了,您可以随时进行自定义验证:
validate :type_presence_with_message
def type_presence_with_message
return unless field.blank?
if type.blank?
errors.add(:type, "Error in #{name}")
end
end
答案 1 :(得分:0)
#app/models/menu_table.rb
class MenuTable < ActiveRecord::Base
validates :type, presence: { message: "cannot be blank" }, if: "field.blank?"
end
根据Rails文档,您可以调用local 如果值存在,则如何存在值需要?我的不好,抱歉。%{value}
variable来使用 特定字段自定义错误消息。
You can also pass a string到你的if
逻辑(看起来更好的IMO)。
我知道这并不能解决你的问题(你想调用另一个模型属性)。
所以我做了一些测试,发现了一些有趣的想法......
首先,validates
方法似乎仅传递相关属性:
似乎使用error message interpolation给你一组3(或4)个对象来调用:
- %{模型}
- %{属性}
- %{值}
- %{count}(仅限数字实例)
这意味着如果要从对象访问其他值,则必须使用一种方式来授予对当前模型实例值的访问权限。 @Sergio Tulentsev
的回答很好,但我想找到一种方法来使用内联validates
。
This answer解释得很好:
验证的范围是Class,而不是您要验证的对象
这意味着您必须使用@Sergio Tulentsev
的答案来创建自定义验证(定位到对象上)。