0
我有多對多的關係,我想用複選框來選擇我需要的關係。 控制器(我用的支架)rails 4多對多表格保存和更新
...
def update
#params[:characteristic][:property_ids] ||= []
respond_to do |format|
if @characteristic.update(characteristic_params)
format.html { redirect_to @characteristic, notice: 'Characteristic was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @characteristic.errors, status: :unprocessable_entity }
end
end
end
...
def characteristic_params
params[:characteristic][:property_ids] ||= []
params.require(:characteristic).permit(:characteristicable_id, :characteristicable_type, :property_ids)
end
型號
class Property < ActiveRecord::Base
has_and_belongs_to_many :characteristics
mount_uploader :image, PropertyUploader
end
class Characteristic < ActiveRecord::Base
has_and_belongs_to_many :properties
end
我爲特徵
<%= form_for(@characteristic) do |f| %>
<% if @characteristic.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@characteristic.errors.count, "error") %> prohibited this characteristic from being saved:</h2>
<ul>
<% @characteristic.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<% for p in Property.find(:all) %>
<p>
<%= check_box_tag "characteristic[:property_ids][]", p.id, @characteristic.properties.include?(p) %>
<%= image_tag p.image_url(:thumb).to_s %>
<%= p.name %>
</p>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
當我選擇複選框並保存我的關係形式不節省,但通知說,更新\保存是成功的。如果我不籤任何複選框有錯誤
undefined method `[]' for nil:NilClass
params[:characteristic][:property_ids] ||= []
解決
<%= check_box_tag "characteristic[:property_ids][]", p.id, @characteristic.properties.include?(p) %>
我改
<%= hidden_field_tag "characteristic[property_ids][]", '' %>
...
<%= check_box_tag "characteristic[property_ids][]", p.id, @characteristic.properties.include?(p) %>
和控制器
def characteristic_params
params[:characteristic][:property_ids] ||= []
params.require(:characteristic).permit(:characteristicable_id, :characteristicable_type, :property_ids)
end
至
def characteristic_params
params.require(:characteristic).permit(:characteristicable_id, :characteristicable_type, { :property_ids => [] })
end
我跟着screencast但導軌4預計HABTM爲{:child_id => []}和形式應具有parentmodel [child_ids] []但不parentmodel [:child_ids] []或它會導致「未經許可的參數:: child_ids」