首页 > 解决方案 > 如何使用删除功能向用户隐藏数据

问题描述

我正在创建 rails 产品控制器来隐藏产品而不使用布尔值删除用户网格面板,但我尝试了很多次,它不起作用。我只是显示我的代码..请帮助我丢失的地方...

我正在使用 ruby​​ 2.4.1,rails 5.3.2 请帮助我。

铁路路线是,

  post 'products/hide', to: 'products#hide'

产品控制器功能是,

 def hide
    @product = Product.find(params[:id])
    @product.hidden = true          
    flash[:notice] = 'you have successfully hide your product'
    redirect_to suppliers_index_path        
end

视图形式是,

   <%= link_to 'delete', product, method: :hide, data: { confirm: 
   "Are you sure hide this #{product.Product_name} ?" } %>

产品表迁移是

 class AddHiddenToProducts < ActiveRecord::Migration[5.2]
    def change
      add_column :products, :hidden, :boolean, :default => false
    end
 end

请帮助解决这个问题。

标签: ruby-on-railsruby

解决方案


method传递给call的键link_to没有定义控制器方法,而是 HTTP 方法,所以实际上应该:post是。您可以通过设置正确的路径/http 方法来指定控制器方法。您可以通过以下方式实现您的目标:

<%= link_to 'delete', { controller: products, action: :hide, id: product }, method: :post, data: { confirm: "Your confirmation" } %>

但我会走得更远一点,并提供正确的命名路线,假设你resources :products在你的某个地方routes

resources :products do
  member do
    post :hide
  end
end

在您看来:

<%= link_to 'delete', [:hide, product], method: :post, data: { confirm: "Confirmation text" } %>

推荐阅读