我正在尝试使用Rails button_to在我的连接表中创建一个新实例。
我有4个型号(制造商,批次,报价和批发商) - 制造商有多个批次,批次has_many优惠,以及has_many批发商通过优惠。批发商通过优惠提供多种优惠和多批次。
我将给定批次中的“新优惠”视图设置为所有批发商的列表,以便制造商可以单击单个批发商旁边的按钮,该按钮将创建链接该批次的新“优惠”和特定的批发商。
<%= button_to '+', {:controller => "offers", :action => "create", :wholesaler_id => wholesaler.id}, :method=>:post %>
我在商品控制中的创建方法:
def create
@offer = Offer.new(offer_params)
respond_to do |format|
if @offer.save
format.html { redirect_to @offer, notice: 'Offer was successfully created.' }
format.json { render :show, status: :created, location: @offer }
else
format.html { render :new }
format.json { render json: @offer.errors, status: :unprocessable_entity }
end
end
end
商品控制中的我的offer_params方法:
def offer_params
params.require(:offer).permit(:batch_id, :wholesaler_id, :amount, :accepted, :ignored)
end
当我尝试点击添加按钮时出现错误 -
ActionController::ParameterMissing in OffersController#create
param is missing or the value is empty: offer
指的是offer_params方法。
由于我没有创建优惠,直到我点击按钮我不知道如何/在哪里可以引用它。
感谢您提供任何帮助 - 很高兴发布任何可能有助于回答的其他代码。
完整的“新”视图:
<div id="wrapper">
<div id="unselected">
<h2> Wholesalers</h2>
<table>
<thead>
<tr>
<th> Wholesaler </th>
<th> Add</th>
</tr>
</thead>
<tbody>
<% @unselected_wholesalers.each do |wholesaler| %>
<tr>
<td><%=wholesaler.name %></td>
<td><%= button_to '+',
{:controller => "offers", :action => "create",
:wholesaler_id => wholesaler.id},
:method=>:post %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<%= link_to 'Back', manufacturer_batches_path(@manufacturer) %>
答案 0 :(得分:0)
由于require
语句,offer_params
期待名为offer
的对象包含键batch_id
,wholesaler_id
等。这看起来像这样:
{
offer: {
batch_id,
wholesaler_id,
amount,
etc.
}
}
但看起来你的button_to正在发送:
{
batch_id,
wholesaler_id,
amount,
etc.
}
最简单的解决方案是删除require
语句,为您提供offer_params
这样的内容:
def offer_params
params.permit(:batch_id, :wholesaler_id, :amount, :accepted, :ignored)
end