と の 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_id
、topic_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 ステートメントを使用してクライアントを作成するときに、クライアントに割り当てられたトピックを取得するにはどうすればよいですか?
ありがとう!