从另一个脚手架更新表格

时间:2017-04-17 23:09:36

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试从另一个脚手架的视图更新记录,问题是它向我发送了以下错误:

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

1 个答案:

答案 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| %>