1

スコープ付き一意性検証のカスタムメッセージが表示されません。レール検証のカスタムエラーメッセージは無視されます/表示されません。なぜですか?

私には関連コードが含まれていますが、他に見たいことがあると思ったら教えてください。むしろ「XXX」より

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 

、表示されたエラーメッセージは次のとおりです。

Grapeages is invalid 
+0

「表示されません」とはどういう意味ですか? 'grapeage.errors'に問い合わせると、あなたの見解には表示されません。 'grapeage.errors'にあなたのビューがあれば私たちに見せてください – Damien

答えて

2

私は、私の検索が3668018に私を導いたと私はそのfirst postフォローアップ.. validates_associatedの周りに検索して解決策を見つけました現時点で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 

サーバーを再起動することを忘れないでください。

関連する問題