Ruby on Rails
Ruby on Railsのネストされたフォーム
サーチ…
Ruby on Railsでネストされたフォームを設定する方法
最初に持っているもの:他のモデルとhas_manyリレーションを含むモデル。
class Project < ApplicationRecord
has_many :todos
end
class Todo < ApplicationRecord
belongs_to :project
end
ProjectsController :
class ProjectsController < ApplicationController
def new
@project = Project.new
end
end
ネストされたフォームでは、親オブジェクトを持つ子オブジェクトを同時に作成できます。
<%= nested_form_for @project do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% # Now comes the part for `Todo` object %>
<%= f.fields_for :todo do |todo_field| %>
<%= todo_field.label :name %>
<%= todo_field.text_field :name %>
<% end %>
<% end %>
私@projectがProject.new @projectを初期化して、新しいProjectオブジェクトを作成するためのもの、 Todoオブジェクトを作成するためのものと同じようにする必要があるため、これを行う方法はいくつかあります。
Projectscontrollerでは、newメソッドで、@todo = @project.todos.buildまたは@todo = @project.todos.newと書くことで、新しいTodoオブジェクトをインスタンス化できます。ビューでもこれを行うことができます:
<%= f.fields_for :todos, @project.todos.build %>
強力なパラメータの場合、次のようにパラメータを含めることができます。
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Projectオブジェクトの作成によってTodoオブジェクトが作成されるため、 Projectモデルで以下の行を追加してこのことを指定する必要があります。
accepts_nested_attributes_for :todos
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow