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