2015-12-22 56 views
1

我有一个MenuTable模型的名称字段的值,我想使用的validate_pressence_of消息,而是名称字段的值在场,我得到了模型如何获得一个模型

的名称

代码:

class MenuTable < ActiveRecord::Base 
    validates_presence_of :type, :if => lambda {(field.blank?)}, :message => "Error in " + self.name 
end 

回答

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 
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方法似乎只对通过相关的属性:

enter image description here

这似乎使用error message interpolation给你一组3个(或4个)对象来呼叫:

  • %{模型}
  • %{属性}
  • %{值}
  • %{数}(只在数字实例)

这意味着,如果你想访问来自对象的其他值,您必须使用一种方法来授予对当前模型实例值的访问权限; @Sergio Tulentsev的答案做得很好,但我想找到一种方法来使用在线validates

This answer很好地解释了:

验证的作用域是类而不是对象要验证

这意味着你将不得不使用@Sergio Tulentsev的回答创建一个自定义验证(其范围在对象上)。

+0

是的,问题是使用name属性。相反,**名称字段**的值,我得到类/模型的名称。所以我创建了一个方法,'self.name' /'“#{name}”'现在正在工作。 –

+0

这是在一个自定义验证器? –

+0

是的,从上面的答案^ _ ^ –