0

と の 2 つのモデルがClientありTopicます。両者の間に HABTM 関連があります。

クライアント ビューのパーシャルに select ステートメントを追加しようとしてい_formます。これにより、ユーザーはトピックをクライアントに追加 (またはそのトピックの編集など) できるようになります。

これは私のフォームのパーシャルがどのように見えるかです:

<%= form_for(@client) do |f| %>

  <div class="field">
    <%= f.label :topic %><br />
    <%= f.select :topics, Topic.all.collect { |topic| [topic.name, topic.id] }, {:include_blank => 'None'} %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

私が得た最初のエラーはこれでした:

ActiveModel::MassAssignmentSecurity::Error in ClientsController#create

Can't mass-assign protected attributes: topics

したがって、私のClientモデルでは、これを追加しました:

attr_accessible :email, :firm_id, :name, :phone, :topics

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

NoMethodError in ClientsController#create

undefined method `each' for "1":String

私のコントローラの作成アクションClientsは非常に標準的です:

  def create
    @client = Client.new(params[:client])

    respond_to do |format|
      if @client.save
        format.html { redirect_to @client, notice: 'Client was successfully created.' }
        format.json { render json: @client, status: :created, location: @client }
      else
        format.html { render action: "new" }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

これらは送信されたパラメーターです(topics渡されていることに注意してください-代わりにtopic_idtopic_idどちらも機能しません):

{"utf8"=>"✓",
 "authenticity_token"=>"J172LuZQc5NYoiMSzDD3oY9vGmxxCX0OdxcGm4GSPv8=",
 "client"=>{"name"=>"Jack Daniels",
 "email"=>"jack.daniels@some-email.com",
 "phone"=>"2345540098",
 "firm_id"=>"2",
 "topics"=>"1"},
 "commit"=>"Create Client"}

この select ステートメントを使用してクライアントを作成するときに、クライアントに割り当てられたトピックを取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

「トピック」属性を設定する場合、クライアントはトピック クラスのインスタンスを期待します。

ID を渡しているため、以下を変更する必要があります。

<%= f.select :topics, Topic.all.collect { |topic| [topic.name, topic.id] }, {:include_blank => 'None'} %>

topic_ids代わりに設定するには:

<%= f.select :topic_ids, Topic.all.collect { |topic| [topic.name, topic.id] }, {:include_blank => 'None'} %>

そしてもちろん、attr_accessible で:

attr_accessible :email, :firm_id, :name, :phone, :topic_ids
于 2012-09-05T19:24:09.150 に答える