【问题标题】:button_to in Rails 4 : Redirection to Controller action with params and Bootstrap ClassRails 4 中的 button_to:使用参数和引导类重定向到控制器操作
【发布时间】:2016-01-23 09:21:19
【问题描述】:

在我的 Rails 4 项目中,在 Customer 视图中,我想定义一个 button_to ,以在我的客户控制器中调用 my_method。我还想通过 bootstarp 类传递一些参数:class: "btn btn-primary"

我试过这个:

<td><%= button_to "Charge Customer",charge_lease_customer_customers_path, params: { doc_delete: true }, class: "btn btn-primary" %></td>

在我的 routes.rb 中

get 'charge_lease_customer' => 'customers#charge_lease_customer', as: :charge_lease_customer

当我点击按钮时,会出现以下错误屏幕:

No route matches [POST] "/customers/charge_lease_customer"

如何实现?

【问题讨论】:

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


    【解决方案1】:
    <%= button_to "Charge Customer", charge_lease_customer_customers_path, method: :get, params: { doc_delete: true }, class: "btn btn-primary" %>
    

    根据docs

    如果没有给出:method 修饰符,它将默认执行POST 操作

    --

    由于您的路由是GET 请求,Rails 无法识别您正在尝试编写的内容。您的 button_to 助手正在使用 POST 动词填充路线。您需要显式定义method: :get 以使路由有效


    您还应该查看您的routes,特别是,只要有可能,您应该在resources 周围确定您的路线:

    #config/routes.rb
    resources :customers do 
       get :charge_lease_customer, on: :collection
    end
    

    更新

    您不应该通过您的路线传递预定义的数据除非数据是可以公开更改的。 IE 也许你想设置doc_delete 或其他。

    如果你想编辑一个特定的customer,你需要一个member route

    #config/routes.rb
    resources :companies do
       get :charge_lease_customer, on: :member #-> url.com/customers/:id/charge_lease_customer
    end 
    

    这样做的价值在于它允许您传递:id 参数,该参数可以被您的控制器拾取:

    #app/controllers/customers_controller.rb
    class CustomersController < ApplicationController
       def charge_lease_customer
          @customer = Customer.find params[:id] 
          # do something with @customer
       end 
    end
    

    --

    如果您想通过参数传递特定于客户的数据,则必须确保它全部位于“顶级”参数结构中:

    <%= button_to "x", button_path, params: { customer_id: @customer.id, customer_name: @customer_name } %>
    

    不建议这样做 - 太多configuration

    【讨论】:

    • Pech:感谢 Rich 的更正,是否可以通过此按钮参数传递包含客户详细信息的集合对象“@customer”?
    • 你能说得更具体点吗? “包含客户详细信息” - 你是什么意思?
    • "@Customer" 包含 f_name、l_name、user_id 等
    • 为什么需要将数据传递给控制器​​?
    • 在charge_lease_customer 方法中,我需要客户详细信息才能对客户详细信息执行一些操作,这就是为什么,以及如何隐藏与链接一起传递的参数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多