通过父资源的索引表创建子资源 - Ruby on Rails

时间:2017-06-23 14:49:37

标签: ruby-on-rails ruby

您好我想在资源的索引表中放置一个链接来创建子资源。 我有一个销售和一个操作:

class Sale < ApplicationRecord
  belongs_to :user
  has_one :operation, dependent: :destroy
end

class Operation < ApplicationRecord
  belongs_to :sale
end

我希望能够通过销售索引表创建操作。 事实是,我需要在按钮/链接点击上创建它,而不是转移到新的操作视图。 (操作只有sale_id和id作为属性) 像这样的东西

<table>
  <tr>
    <th>Sale Id</th>
  </tr>

  <% @sales.each do |sale| %>
      <td><%= sale.id %></td>
      <td><%= link_to 'Show', sale_path(sale) %></td>
      <td><%= link_to 'Edit', edit_sale_path(sale) %></td>
      <td><%= link_to 'Delete', sale,
              method: :delete,
              data: { confirm: 'Are you sure?' } %></td>
      <td> <%= form_for (@operation) do |o| %>
             <%= o.submit 'Create Operation'%> 
           <% end %> 
      </td>
    </tr>                     
  <% end %>
</table>

但我收到了这个错误:&#39;表格中的第一个参数不能包含nil或为空&#39;

我也试过这个:

<td> 
  <%= fields_for :operation, @sales.operation do |o| %> 
    <%= o.submit "Create Operation" %>
  <% end %>
</td>

我得到了这个: 未定义的方法`操作&#39;待售:: ActiveRecord_Relation:0xb1a4ece4&gt;

也尝试了这个:

<td> 
  <%= link_to  'Create Operation', 'operations#create' %> 
</td>

但它将我发送到操作索引视图而不创建操作。

1 个答案:

答案 0 :(得分:1)

  

表单中的第一个参数不能包含nil或为空

错误表示{em>表单中的@operationnil 。您应该在@operation方法中定义sales#index,因为表单位于sales/index.html.erb

def index
  @operation = Operation.new
end
  

我需要在按钮/链接点击上创建它,而不是   转移到新的操作视图

如果您的意思是,您不应该在按钮后重定向到另一个视图,那么您必须使用 AJAX 。我建议您查看这些Guides以了解如何使用 AJAX

相关问题