0
我有兩個型號Client
和Topic
。它們之間都有HABTM關聯。以HABTM協會的部分形式選擇聲明
我想在我的客戶端視圖的_form
部分中添加一條select語句,允許用戶向客戶端添加主題(或編輯該主題等)。
這是我的形式部分看起來像:
<%= 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
也不管用)的PARAMS:
{"utf8"=>"✓",
"authenticity_token"=>"J172LuZQc5NYoiMSzDD3oY9vGmxxCX0OdxcGm4GSPv8=",
"client"=>{"name"=>"Jack Daniels",
"email"=>"[email protected]",
"phone"=>"2345540098",
"firm_id"=>"2",
"topics"=>"1"},
"commit"=>"Create Client"}
如何在使用此select語句創建客戶端時獲得分配給我的客戶端的主題?
謝謝!
啊。 ..當然。完善。 Rails指南對這些細節有點輕鬆,不是嗎?還是我在某個地方想念它? – marcamillion
該指南的部分內容絕對不在您的面前: http://guides.rubyonrails.org/association_basics.html#has_many-association-reference 請參閱「4.3.1.6 collection_singular_ids = ids」 –
Yeh ..這很愚蠢。當我抽出時間時,我會舉一些例子,看看他們是否會接受它。再次感謝! – marcamillion