button_to in Rails 4:重定向到带有参数和 Bootstrap Class 的控制器操作
button_to in Rails 4 : Redirection to Controller action with params and Bootstrap Class
在我的 Rails 4 项目中,在客户视图中我想定义一个 button_to ,调用 my_method 在我的客户控制器中。我也想通过 bootstarp 传递一些参数 class: 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"
如何实现?
<%= button_to "Charge Customer", charge_lease_customer_customers_path, method: :get, params: { doc_delete: true }, class: "btn btn-primary" %>
根据 docs:
If no :method
modifier is given, it will default to performing a POST
operation
--
由于您的路由是 GET
请求,Rails 无法识别您尝试写入的内容。您的 button_to
助手正在使用 POST
动词填充路由。您需要显式定义 method: :get
以使路由有效
您还应该查看您的 routes
,特别是,只要可能,您应该围绕 resources
:
确定路线范围
#config/routes.rb
resources :customers do
get :charge_lease_customer, on: :collection
end
更新
你不应该通过你的路线传递 pre-defined 数据 除非 数据是公开可变的。 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
--
如果您想通过参数传递 customer-specific 数据,您必须确保它全部在 "top level" 参数结构中:
<%= button_to "x", button_path, params: { customer_id: @customer.id, customer_name: @customer_name } %>
不推荐-太多了configuration。
在我的 Rails 4 项目中,在客户视图中我想定义一个 button_to ,调用 my_method 在我的客户控制器中。我也想通过 bootstarp 传递一些参数 class: 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"
如何实现?
<%= button_to "Charge Customer", charge_lease_customer_customers_path, method: :get, params: { doc_delete: true }, class: "btn btn-primary" %>
根据 docs:
If no
:method
modifier is given, it will default to performing aPOST
operation
--
由于您的路由是 GET
请求,Rails 无法识别您尝试写入的内容。您的 button_to
助手正在使用 POST
动词填充路由。您需要显式定义 method: :get
以使路由有效
您还应该查看您的 routes
,特别是,只要可能,您应该围绕 resources
:
#config/routes.rb
resources :customers do
get :charge_lease_customer, on: :collection
end
更新
你不应该通过你的路线传递 pre-defined 数据 除非 数据是公开可变的。 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
--
如果您想通过参数传递 customer-specific 数据,您必须确保它全部在 "top level" 参数结构中:
<%= button_to "x", button_path, params: { customer_id: @customer.id, customer_name: @customer_name } %>
不推荐-太多了configuration。