我使用嵌套表单创建了一个项目,在select上添加了多个选项但未正确保存。
表格
|users|
|id| |name| |lastname|
1 Cristiano Ronaldo
2 Lionel Messi
3 David Beckham
4 Thomas Muller
|ejecutives|
|id| |name|
1 Mourinho
2 Guardiola
|user_ejecutives|
|id| |user_id| |ejecutive_id|
1 1 1
2 1 4
3 2 3
4 2 2
控制器 users_controller.rb :
def new
@user = User.new
@ejecutives = Ejecutive.where('id=1')
@user_ejecutives = @user.user_ejecutives.build
end
def create
@user = User.new user_params
@user.save
end
private
def user_params
params.require(:user).permit(:name,:lastname, user_ejecutives_attributes: [])
end
型号:
#User.rb
has_many :user_ejecutives
accepts_nested_attributes_for :user_ejecutives
#Ejecutive.rb
has_many :user_ejecutives
#UserEjecutive.rb
belongs_to :user
belongs_to :ejecutive
查看
<%= form_for @user do |f| %>
<%= form.text_field :name %>
<%= form.text_field :lastname %>
<%= f.fields_for :user_ejecutives do |builder| %>
<%= render 'user_ejecutive_fields', :f => builder %>
<% end %>
<% end %>
部分:
Select user ejecutives:
<%= f.select :ejecutive_id, @ejecutives.collect { |e| [e.name,e.id] }, {prompt: "Select 2 or more"}, {:multiple => true, class: "input-lg"} %>
这是编辑的演示项目:
http://code.runnable.com/VvMYsfuOOwtvL870/nested-form-listbox-multipe-options
问题是没有保存多个选择:
Parameters: {"utf8"=>"✓", "user"=>{"name"=>"sddasdas", "lastname1"=>"das","user_ejecutives_attributes"=>{"0"=>{"ejecutive_id"=>["", "1", "2"] }}} , "commit"=>"Save"}
INSERT INTO `users` (`name`, `lastname1`, `created_at`, `updated_at`) VALUES ('David', 'Beckham', '2016-03-28 19:43:18', '2016-03-28 19:43:18')
INSERT INTO `user_ejecutives` (`user_id`, `created_at`, `updated_at`) VALUES (68, '2016-03-28 19:43:18', '2016-03-28 19:43:18')
COMMIT
不保存在mysql中选择的名称我看到NULL
答案 0 :(得分:0)
请参阅服务器控制台,它说
Unpermitted parameters: user_ejecutives_attributes
users_params
中的users_controller
params.require(:user).permit(:name, :lastname, user_ejecutive_ids: [] )
将user_ejecutive_ids
更改为user_ejecutives_attributes
可能会起作用
答案 1 :(得分:0)
params.require(:user).permit(:name, :lastname,:user_ejecutives_attributes )
不要忘记冒号(:user_ejecutives_attributes而不是user_ejecutives_attributes)。这是一个红宝石的象征。
用户模型的变化:
has_many :ejecutives, through: :user_ejecutives
改变主持人模型:
has_many :users, through: :user_ejecutives
我会选择集合而不是选择:
f.collection_select( :ejecutive_id, Ejecutive.all, :id, :name, {:include_blank => 'Please Select'})