ネストされたモデルに関する概念的な疑念があります。この質問で自分を明確にすることを願っています。Rails:許可しない:ネストされたモデルのIDにより、新しいインスタンスが自動的に生成されます。どうして?
Iは3つのモデル、、B、及びCを有します。 は、BおよびCのネストされた属性を受け入れます。 AController#newでは、@ a = A.new、@ a.b.build、@ a.c.buildを書きます(私は以下のコードを共有します)。 A定義
SパラメータとCのパラメータのパラメータは、私がBを許可します "。 問題:CのID:を許可することを忘れてしまった。私は私のウェブサイト上でのインスタンスを編集しますたびしたがって
は、(たとえば、で「// 1 /編集」)、それが自動的にCの新しいインスタンスを作成します。 、それがをなぜ起こるのだろうか:問題の診断
は(ID欠落していた、そしてそれが問題であったと推測され、私はちょうどCさんがいることを発見)は非常に簡単でした。誰かが洞察力を持っていますか?私のコードの詳細が続きます。
a.rb
has_many :b
has_many :c
accepts_nested_attributes_for :b
accepts_nested_attributes_for :c
a_controlle.rb
def new
@a = A.new
@a = @a.b.build
@a = @a.c.build
end
def edit
@a = A.find(params[:id])
end
def update
if A.find(params[:id]).update_attributes(a_params)
#SOME CODE
end
def create
@a = A.new(a_params)
#SOME CODE
end
private
def a_params
params.require[:a].permit(:a_name, b_attributes: [:id, :b_name],
c_attributes: [:c_name]) ## SEE, I had forgotten C's :id.
end
そしてA/new.html.erb及びA/edit.html.erb両方B及びC fields_for有します
だから誰でもいつでも私はA/[:id] /にアクセスし、編集するとCの新しいインスタンスが生成されますそれを許可するのを忘れていた:id?