수색…


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.new@project 를 초기화하여 새로운 Project 객체를 생성하는 것과 같은 방법으로 Todo 객체를 생성하는 것과 같은 방법이 필요합니다. 여러 가지 방법이 있습니다 :

  1. Projectscontroller 에서 new 메서드로 다음과 같이 작성할 수 있습니다. @todo = @project.todos.build 또는 @todo = @project.todos.new 를 사용하여 새 Todo 객체를 인스턴스화 할 수 있습니다.

  2. 또한보기에서 이것을 할 수 있습니다 : <%= f.fields_for :todos, @project.todos.build %>

강력한 매개 변수의 경우 다음과 같이 매개 변수를 포함 할 수 있습니다.

def project_params
  params.require(:project).permit(:name, todo_attributes: [:name])
end

이후, Todo 오브젝트는 생성을 통해 생성됩니다 Project 개체, 그래서 당신은이 일 지정해야 Project 에 다음 줄을 추가하여 모델 :

accepts_nested_attributes_for :todos


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow