0

私は 2 つのモデル - Client&Topicを持っており、その間に HABTM 関係があります。

formクライアント部分で、トピックの一連のチェックボックスを生成しようとしています。

これは私がやっていることです:

<% Topic.all.each do |topic| %>
  <% checked = @client.topics.include?(topic) %>
    <%= f.label(:name, topic.name) %> <%= f.check_box @topics, topic.id %>
<% end %>

これは私が得るエラーです:

undefined method `merge' for 1:Fixnum

を使用することが 1 つの解決策であることはわかってcheck_box_tagいますが、関連付けのレコード更新を手動で行う必要があります。

したがって、チェックボックスタグには form_helper を使用したいと思います。ドキュメントは私にとって少し混乱しています。

どうすればこれを動作させることができますかf.check_box

ありがとう。

4

2 に答える 2

0

コードは私を混乱させます。何@topicsが含まれていますか?それがのコレクションであるTopic場合、なぜTopicビューのモデルに直接アクセスしているのですか?それはそのようになります:

@topics.each.do

あなたではなく

Topic.all.each

さらに、ループ内のコレクションとして@topicsを使用しています。check_boxはコレクションからチェックボックスをどのように生成しますか?

次のことを見てください。

  1. accepts_nested_attributes_forhas_manyクライアントトピックの関連付けに加えて、クライアントモデルで設定するためにこれが必要になります
  2. fields_forそれ以外の場合、railsは、この同じフォームからトピックモデルを更新することを認識しません。
  3. このスクリーンキャストをチェックして、どのように機能させることができるかを理解してください
于 2012-10-08T06:30:23.217 に答える
0

何らかの理由で、formヘルパーは では機能しませんcheck_box

したがって、これは機能するコードです。

<%= check_box_tag "client[topic_ids][]", topic.id, checked %>

同様の質問に対する他の回答によると、ヘルパーf.check_boxはモデルにバインドされており、チェックボックスに指定された値はフォームのモデルから暗黙的です。問題は、 form_helper の暗黙的な値を取得して正しいタグを生成する方法がわからないことです。つまりclient[topic_ids][]、 に頼らなければなりませんでしたcheck_box_tag

于 2012-10-08T07:08:07.090 に答える