我有与之关联的产品和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>
答案 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。