我需要在project
上使用选择选项todo
嵌套属性的创建形式,并且它必须处于/projects/index.html.erb
这是projects_controller.rb
def index
@projects = Project.all
@todo = Todo.new
end
模型项目.rb 和 todo.rb
class Project < ApplicationRecord
has_many :todos, inverse_of: :project
accepts_nested_attributes_for :todos, reject_if: proc { |attributes|
attributes[:title].blank? }, allow_destroy: true
end
class Todo < ApplicationRecord
belongs_to :project, inverse_of: :todos
end
路线.rb
root 'projects#index'
resources :projects do
resources :todos
end
和/projects/index.html.erb
<h1>Tasks</h1>
<table>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<% for project in @projects %>
<tr><strong><%= project.title %></strong></tr>
<% for todo in project.todos %>
<ul>
<li><%= todo.text %></li>
</ul>
<% end %>
<% end %>
您需要使用嵌套表单域来处理has_many关联。Rails 提供了一个fields_for
助手来为你完成这项工作。
我已经根据您的用例调整了他们的文档:
<% @projects.each do |project| %>
<%= form_for project do |project_form| %>
...
<% project.todos.each do |todo| %>
<%= project_form.fields_for :todos, todo do |todo_fields| %>
Text: <%= todo_fields.text_field :text %>
<% end %>
<% end %>
<% end %>
...
<% end %>
<% end %>
您还可以使用 gem(例如 nested_form
(,它允许您动态添加和删除待办事项。