2016-03-22 9 views
3

これが私のファイルです:検証 - Railsの

word.rb

class Word < ActiveRecord::Base 
    has_many :word_answers, dependent: :destroy 
    accepts_nested_attributes_for :word_answers, allow_destroy: true, 
    reject_if: lambda {|attribute| attribute[:word_id].blank?} 
end 

word_answer.rb

class WordAnswer < ActiveRecord::Base 
    belongs_to :word 
    validates :content, uniqueness: true, presence: true 
end 

は私がvalidates :content, uniqueness: true, presence: trueをvaliidateすることができます任意の方法はありますword.rbのword_answer.rb?

Railsの4

私はvalidates_associated :word_answersを試してみましたが、それは動作しません。私が達成したい

がある

私はWordを提出した場合は何もWordAnswerがない場合(1)、それはエラーになります。

(2)私がWordを提出すると、「空白の言葉遣い」があるとエラーになります。

(3)WordAnswerが間違っていると、Wordを送信するとエラーが発生します。

+1

'word_answer'モデルでこれらの検証を実行したので、なぜあなたの' word'モデルで検証する必要がありますか? – HashRocket

+0

これらはnested_attributesです。それはどんなword_answersもなく単語を節約します –

+0

なぜあなたは 'content'をユニークにしますか?あなたは何をしようとしているのですか? –

答えて

0

Wordメソッドにvalidates :content, uniqueness: true, presence: trueを追加することはできますが、before_save & before_updateフィルタを追加することで、WordモデルでWordAnswerモデルの検証を行うことはできますか?

WordAnswerモデルの検証は、フォームにネストされた属性を使用するときにうまくいくのでうまく動作し、うまく検証されます。

その他の場合は、実際に達成したいことを親切に説明してください。

+0

私は達成したいです (1)Wordを提出し、WordAnswerがない場合、それは優雅なエラーを表示します。 (2)Wordを提出し、WordAnswerが空白の場合、エラーが発生します (3)WordAnswerに条件を追加すると、Wordを送信すると反映されます。 –

+0

@AldrinGravidesプレゼンスについては、フロントエンドの検証を追加して、応答内容が空白にならないようにし、検証チェックのために私はまもなく回答を更新しています。 –

0

は、あなたのモデルが正しく関連付けられている場合、それが動作するはずです以下

validate :detail 

def detail 
    word_answers.each do |word_answer| 
     if word_answer.content.blank? 
      errors.add(:"word_answer.content", "must not be blank") 
      word_answer.errors.add(:content, "must not be blank") 
     end 
    end 
end 

を試してみてください。

+0

また、 'nested_form'を使うと、 – Lymuel