すべてがうまくいきましたが、コードを変更したいのアクションをの更新のようなアクションに作成します。現在、作成アクションでは、すべての値をループして保存していますが、1行に収めたいと思っています。Railsのネストされたフォーム - リファクタリングの作成アクション|繭の宝飾
私はカレッジモデルを持っています。
class College< ActiveRecord::Base
has_many :staffs, dependent: :destroy
accepts_nested_attributes_for :staffs, reject_if: :all_blank, allow_destroy: true
end
そして、これが
class Staff < ActiveRecord::Base
belongs_to :college
end
私Staff.rbであり、これらは、これらが強いパラメータ
あり と 更新を作成アクションdef create
@college= College.find(params[:college][:id_college_profile]
)
staff_params = params[:college][:staffs_attributes].values
staff_params.each do |staff_param|
@staff = @college.staffs.new
@staff.name = staff_param[:name]
@staff.designation = staff_param[:designation]
@staff.experience = staff_param[:experience]
@staff.specialization = staff_param[:specialization]
@staff.save
end
redirect_to dashboard_path(id: @college.id), notice: "Successfully added Staff."
end
def update
@college= College.find(params[:college][:id_college]
)
@college.update_attributes(staff_parameters)
redirect_to root_path
end
私のスタッフコントローラです
すべての値をループせずにすべてのスタッフを作成アクションに保存する方法はありますか?更新アクションのように1行のコードですべてを保存しますか?
は、私はアクション
def create
@college= College.find(params[:college][:id_college]
)
@staff= @college.staffs.new(staff_parameters)
@staff.save
redirect_to dashboard_path(id: @college.id), notice: "Successfully added Staffs."
end
を作成StaffsControllerでこれを試してみました。しかし、誰かが親切にこの問題で私を助けることができるそれが
unknown attribute 'staffs_attributes' for Staff.
このエラーを投げましたか?
ありがとう。ここに流れがあります。ユーザーがサインアップします。彼はフォームにリダイレクトされます。それを提出すると、そのユーザーの大学オブジェクトが作成されます。この大学のオブジェクトにはスタッフ、コースなどがあります。 スタッフのコントローラでは、その特定の大学のスタッフを作成しています。私が投稿した作成アクションはStaffsControllerにあります。 – Mahendhar
その場合、あなたは常に大学のためのフォームをレンダリングし、大学を保存するので、編集と新しいアクションの間に違いはありませんか? 1人のスタッフを作成したり編集したりすることはないので、潜在的にあなたのルートに混乱を招くことがあります。だから、私の場合、大学のコントローラーは、もう少し「標準的」な面倒を感じています。 – nathanvda
ありがとう@nathanvda。私は、新しいものと編集するための編集フォームをレンダリングしています。コードをCollegesControllerに移動します。小さな質問。私はまた、「職員」のような大学のための「コース」を持っています。 colleges#createの場合、ネストされたコースフォームを編集するときにも 'course_parameters'を許可するように、強力なパラメータを変更する方法は '@ college.update_attributes(staff_parameters)'です。 – Mahendhar