1

我的自定義範圍唯一性驗證消息未顯示。rails驗證自定義錯誤消息被忽略/未顯示。爲什麼?

我包括我認爲是相關的代碼,但請讓我知道如果您認爲還有其他可能需要查看的代碼。

class Beverage < ActiveRecord::Base 
    has_many :grapeages, dependent: :destroy 
    has_many :wine_varietals, through: :grapeages 
    validates_associated :grapeages 
end 

class Grapeage < ActiveRecord::Base 
    belongs_to :beverage 
    belongs_to :wine_varietal 

    # Neither of these seem to work: 
    #validates :wine_varietal_id, uniqueness: {scope: :beverage_id, message: 'xxx'} 
    validates_uniqueness_of :wine_varietal_id, scope: :beverage_id, message: 'xxx' 
end 

而不是「XXX」,顯示的錯誤信息是:

Grapeages is invalid 
+0

'不顯示'是什麼意思?你沒有在你的視圖中看到它,或者當你查詢`grapeage.errors`時沒有看到它?如果它出現在`grapeage.errors`中,請向我們展示您的視圖 – Damien 2011-12-15 01:51:59

回答

2

我找到了解決辦法摸索validates_associated ..我的搜查,我3668018後,我跟蹤瞭解了first post,這爲目前validates_associated覆蓋實際的錯誤信息提供了一個很好的修復方法[型號]無效。作爲獎金,同一個鏈接顯示了刪除重複錯誤消息的好方法(請注意,該類必須更新爲ActiveModel::Errors)。

# config/initializers/validation_fixes.rb 
module ValidatesAssociatedAttributes 
    module ActiveRecord::Validations::ClassMethods 
    def validates_associated(*associations) 
     class_eval do 
     validates_each(associations) do |record, associate_name, value| 
      (value.respond_to?(:each) ? value : [value]).each do |rec| 
      if rec && !rec.valid? 
       rec.errors.each do |key, value| 
       record.errors.add(key, value) 
       end 
      end 
      end 
     end 
     end 
    end 
    end 
end 

# remove duplicate error messages 
class ActiveModel::Errors 
    alias old_full_messages full_messages 
    def full_messages 
    old_full_messages.uniq 
    end 
end 

不要忘記重新啓動服務器。

相關問題