我有一個MenuTable模型的名稱字段的值,我想使用的validate_pressence_of
消息,而是名稱字段的值在名場,我得到了模型如何獲得一個模型
代碼:
class MenuTable < ActiveRecord::Base
validates_presence_of :type, :if => lambda {(field.blank?)}, :message => "Error in " + self.name
end
我有一個MenuTable模型的名稱字段的值,我想使用的validate_pressence_of
消息,而是名稱字段的值在名場,我得到了模型如何獲得一個模型
代碼:
class MenuTable < ActiveRecord::Base
validates_presence_of :type, :if => lambda {(field.blank?)}, :message => "Error in " + self.name
end
如果一切都失敗了,你總是可以做一個自定義的十歲上下的驗證這樣的:
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
#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個)對象來呼叫:
- %{模型}
- %{屬性}
- %{值}
- %{數}(只在數字實例)
這意味着,如果你想訪問來自對象的其他值,您必須使用一種方法來授予對當前模型實例值的訪問權限; @Sergio Tulentsev
的答案做得很好,但我想找到一種方法來使用在線validates
。
This answer很好地解釋了:
驗證的作用域是類而不是對象要驗證
這意味着你將不得不使用@Sergio Tulentsev
的回答創建一個自定義驗證(其範圍在對象上)。
是的,問題是使用name屬性。相反,**名稱字段**的值,我得到類/模型的名稱。所以我創建了一個方法,'self.name' /'「#{name}」'現在正在工作。 –
這是在一個自定義驗證器? –
是的,從上面的答案^ _ ^ –