2015-12-22 57 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

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