我在尝试通过控制器使用link_to更新属性时尝试正确路由:
查看(@ orders.each)
<%= link_to 'Cancel', controller: :orders, action: 'cancel_order', id: order.id %>
OrdersController
def cancel_order
@order = Order.find(params[:id])
@order.update_attribute(status: 0)
redirect_to root_url
end
无论我对我的路线做什么,我都会收到此错误:
No route matches {:action=>"cancel_order", :controller=>"orders", :id=>1}
请帮忙!
答案 0 :(得分:1)
<强>的routes.rb 强>
第一个案例
resources :orders do
member do
get :cancel #output path - cancel_orders/:id
end
end
或 第二个案例
get 'cancel_order/:id' => 'orders#cancel_order', as: :cancel_order
输出路径:cancel_order/:id
:
1个链接:<%= link_to 'Cancel', cancel_orders_path(order) %>
2 link:<%= link_to 'Cancel', cancel_order_path(order) %>
答案 1 :(得分:1)
我的cancel_order
方法
def cancel_order
@order = Order.find params[:id]
@order.update_attributes status: true
redirect_to root_url
end
我的show.html.erb
<%= link_to 'Cancel', cancel_order_order_path(@order), :method => :post %>
我的routes.rb
resources :orders do
member do
post 'cancel_order'
end
end
还有其他方法可以实现工作路由,但这对我来说感觉更干净。如果您发布路线配置,那么找出问题会更容易。我希望这会对你有所帮助。