如何获取模型的名称字段值

时间:2015-12-22 06:49:54

标签: ruby-on-rails ruby-on-rails-4 model

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

代码:

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

2 个答案:

答案 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方法似乎传递相关属性:

enter image description here

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

  
      
  • %{模型}
  •   
  • %{属性}
  •   
  • %{值}
  •   
  • %{count}(仅限数字实例)
  •   

这意味着如果要从对象访问其他值,则必须使用一种方式来授予对当前模型实例值的访问权限。 @Sergio Tulentsev的回答很好,但我想找到一种方法来使用内联validates

This answer解释得很好:

  

验证的范围是Class,而不是您要验证的对象

这意味着您必须使用@Sergio Tulentsev的答案来创建自定义验证(定位到对象上)。