まず、Rails 3.0.9 と Ruby 1.8.7 を使用しています。画面上で検証してユーザーに完全に表示できなかったため、助けが必要です。
モデル:
class Book < ActiveRecord::Base
belongs_to :genre
validates_presence_of :title, :genre
attr_accessible :genre_id
end
フォーム:
<div class="field">
<%= f.label :genre %><br />
<%= f.collection_select(:genre_id, Genre.all(:order => :name), :id, :name, :prompt => 'Select') %>
</div>
フォームを空白で送信すると(デフォルトでプロンプト値が選択されています)、「ジャンルを空白にすることはできません」というエラーメッセージが完全に表示されますが、フォームでは次のようなhtmlを受け取ります。
<div class="field">
<div class="field_with_errors">
<label for="book_genre">Genre</label>
</div>
<br>
<select name="book[genre_id]" id="book_genre_id">
<option value="">Select</option>
<option value="2">Gramatic</option>
<option value="1">Terror</option>
</select>
</div>
CSS で定義した赤い背景のため、div.field_with_erros 内にも選択フィールドが必要です。
その後、 f.collection_select :genre_id を :genre に変更してみました
これで、div.field_with_erros 内に選択フィールドを取得しました。ええ、勝利です。しばらくの間、検証が常にエラーを非難することに気付くまで、レールは選択フィールド :genre が探している :genre_id であることを知りません。
私の質問は: 検証で :genre を :genre_id に変更するにはどうすればよいですか? それとも、皆さんはそれを行うためのより良い方法を持っていますか?
テストを続けて、ラベルとcollection_selectをgenre_idに変更しようとしましたが、検証は完全に機能しますが、div.field_with_errorsでhtmlを生成しないので、validates_presence_ofに:genre_idを入れようとしたので、次のようになりました: "validates_presence_of :title , :ジャンル, :ジャンル_id".
すごいけど…
フォームを送信してデフォルトのプロンプト値を選択すると、検証は正常に機能しますが、1つは:genreに、もう1つは:genre_id(¬¬)に2つのエラーが発生しますが、htmlは問題なく、ラベルと選択はdiv内にあります.field_with_erros.
フォームを送信し、ジャンルからいくつかの値を選択した場合、検証と html は問題ありません。
フォームを送信しても、一部のオプションの値を無効なものに変更して、モデル間の検証が機能するかどうかをテストした場合、検証は実際には正常に機能しますが、html は div.field_with_erros を作成しません。
誰でも私を助けてくれますか?(はい、私の英語は最高ではありません。申し訳ありません!)