嵌套选择多个选项未保存

时间:2016-03-23 22:48:39

标签: ruby-on-rails ruby ruby-on-rails-4

我使用嵌套表单创建了一个项目,在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

2 个答案:

答案 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'})