后台控制器的未定义方法

时间:2019-12-20 18:51:25

标签: ruby-on-rails ruby

我有与之关联的产品和2个控制器。 在一个(products_controller.rb)中,只有index和show方法。 另一个(backoffice / products_controller.rb)具有所有CRUD方法。 当我想在backoffice / products_controller.rb中使用create或destroy方法时,我收到一个错误消息,这些方法在products_controller.rb中不可用。 方法索引并显示正常工作。

例如,我如何在backoffice / products_controller中使用Destroy方法

  def destroy
    @post.destroy
    respond_to do |format|
      format.js { render 'destroy', status: :destroy, location: @product }
      format.html { redirect_to admin_products_path, notice: 'Product was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

以及我如何调用此方法(视图/后台/产品):

<%= link_to (fa_icon "trash"), product,  method: :delete, data: { confirm: 'Are you sure?' }, class: "pull-right btn btn-outline-danger" %>

错误-The action 'destroy' could not be found for ProductsController

路线:

  scope '/admin' do
    resources :categories, controller: 'backoffice/categories', as: "admin_categories"
    resources :products, controller: 'backoffice/products', as: "admin_products"
  end

UPD 形式:

<div class="container main">

  <%= form_with(model: product, local: true) do |form| %>

  <div class="field">
  <%= form.collection_select(:category_id, Category.all, :id, :title, class:'form-control' ) %>
</div>

  <div class="field">
      <%= form.label :title %>
      <%= form.text_field :title, class: "form-control"%>
  </div>
  <div class="field">
    <%= form.label :description %>
    <%= form.text_area :description, class: "form-control"%>
  </div>
  <br>
  <div class="text-center actions">
    <%= form.submit 'Submit', class: "btn btn-dark" %>
  </div>
  <% end %>
</div>

1 个答案:

答案 0 :(得分:1)

如果查看生成的HTML,则会发现:

<%= link_to (fa_icon "trash"), product,  method: :delete, data: { confirm: 'Are you sure?' }, class: "pull-right btn btn-outline-danger" %>

...解析为ProductsController(类似products/1),而不是Backoffice::ProductsController(类似backoffice/products/1)。您可能想要做更多类似的事情:

<%= link_to (fa_icon "trash"), admin_product_path(product),  method: :delete, data: { confirm: 'Are you sure?' }, class: "pull-right btn btn-outline-danger" %>

在您的表单中,您需要执行以下操作:

<%= form_with(model: product, local: true, url: admin_products_path) do |form| %>

您可能不需要摆弄那个url位。参见the docs