您好我想在资源的索引表中放置一个链接来创建子资源。 我有一个销售和一个操作:
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>
但它将我发送到操作索引视图而不创建操作。
答案 0 :(得分:1)
表单中的第一个参数不能包含nil或为空
错误表示{em>表单中的@operation
为nil
。您应该在@operation
方法中定义sales#index
,因为表单位于sales/index.html.erb
def index
@operation = Operation.new
end
我需要在按钮/链接点击上创建它,而不是 转移到新的操作视图
如果您的意思是,您不应该在按钮后重定向到另一个视图,那么您必须使用 AJAX 。我建议您查看这些Guides以了解如何使用 AJAX