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”