如何在轨道上的红宝石中使用选择选项创建表单 5.



我需要在project上使用选择选项todo嵌套属性的创建形式,并且它必须处于/projects/index.html.erb这是projects_controller.rb

def index
  @projects = Project.all
  @todo = Todo.new
end

模型项目.rbtodo.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(,它允许您动态添加和删除待办事项。

最新更新