与えられたProblem
&Observer
モデル:
class Problem < ActiveRecord::Base
has_many :observers
accepts_nested_attributes_for :observers
end
class Observer < ActiveRecord::Base
belongs_to :problem
belongs_to :user
end
form_for
ユーザーをオブザーバーとして選択するために使用しようとしています:
<%= f.fields_for :observers do |obs| %>
<%= obs.collection_select(:user_id, Users.to_a, :id, :name, {:include_blank => true, include_hidden: false}, {:multiple => true}) %>
<% end %>
ただし、Rails は select:problem[observers_attributes][0][user_id][]
の間違った名前を生成するため、strong_params ( {:observers_attributes => [{:user_id => []}]}
) のルールを作成しても、間違った関係が作成され、問題の ID のみがデータベースに送信され、すべての user_id が無視されます。
私がやろうとしているのは、複数の選択ですべてのユーザーを表示し、ID を取得し、Problem#new
メソッドでそれらの関連付けを作成することです。
アップデート 12.10
掲載パラメータ:
パラメーター:{"utf8"=>"✓", "authenticity_token"=>"NHDl/hrrFgATQOoz9A3OLbLDAbTMziKMQW9X1y2E8Ek=", "problem"=>{"problem_data_attributes"=>{"title"=>"safasfasfafsasf", "description"=>""}, "observers_attributes"=>{"0"=>{"user_id"=>["5", "8"]}}}}
強力なパラメータ:
def problem_params
params.require(:problem).permit({:files_attributes => [:attach_id]}, {:observers_attributes => {:user_id => []}}, {:problem_data_attributes => [:title, :description]})
end
メソッドの作成
def create
@problem = @project.problem.build(problem_params)
@problem.account = current_account
if @problem.save
render :json => {status: true, id: @problem.id}
else
respond_with(@problem)
end
end
そして、作成呼び出し中にオブザーバーを作成するSQL:
SQL (0.2ms) INSERT INTO `observers` (`problem_id`) VALUES (96)