我正在尝试从另一个脚手架的视图更新记录,问题是它向我发送了以下错误:
No route matches {:action=>"update", :controller=>"pedidosliberados"}
我每张唱片都会显示一张表格 这是我的表格:
<% @pedidosliberados.each do |pedidoliberado| %>
<tr id="pedido_liberado_<%= pedidoliberado.id %>">
<td class="component_name_body_col"><%=pedidoliberado.try(:Client)%></td>
<td class="component_name_body_col">
<%= form_for(pedidoliberado, :method => :put, remote: true, :url => {:controller =>'pedidosliberados', :action => 'update'}, html: {class: "form-horizontal "}) do |f| %><!--ajax-->
<%= f.text_field :Status, value: "1" %>
<%= submit_tag "Actualizar", class: "btn btn-primary"%>
<% end %>
</td>
</tr>
<% end %>
我的路线:
resources :pedidosliberados
来自控制器pedidosliberados的行动更新:
def update
respond_to do |format|
if @pedidoliberado.update(pedidoliberado_params)
format.html { redirect_to @pedidoliberado, notice: 'Pedidoliberado was successfully updated.' }
format.json { render :show, status: :ok, location: @pedidoliberado
format.js {}
else
format.html { render :edit }
format.json { render json: @pedidoliberado.errors, status: :unprocessable_entity }
format.js {}
end
end
end
答案 0 :(得分:0)
问题是您使用的路线不完整,即/update
;您需要添加要更新的对象的id
,例如/update/12
,其中12
是对象的ID。因此,在您的代码中,您可以删除:url
属性,您就可以了。
所以你的观点现在应该是这样的:
<% @pedidosliberados.each do |pedidoliberado| %>
<tr id="pedido_liberado_<%= pedidoliberado.id %>">
<td class="component_name_body_col"><%=pedidoliberado.try(:Client)%></td>
<td class="component_name_body_col">
<%= form_for(pedidoliberado, :method => :put, remote: true, html: {class: "form-horizontal "}) do |f| %><!--ajax-->
<%= f.text_field :Status, value: "1" %>
<%= submit_tag "Actualizar", class: "btn btn-primary"%>
<% end %>
</td>
</tr>
<% end %>
这是因为rails会自动为您的对象分配正确的控制器和操作(使用REST路由时)。
<强>更新强>
如果你想明确分配网址,那么就像你正在做的那样使用:url
,但添加:id
(记住,你需要指定要更新的对象的id
)。所以,你的form
应该是这样的:
<%= form_for(pedidoliberado, method: :put, remote: true, url: { controller: 'pedidosliberados', action: 'update', id: pedidoliberado.id }, html: { class: "form-horizontal " }) do |f| %>