在Rails中使用带有link_to的update_attribute时的路由

时间:2014-03-13 17:16:40

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

我在尝试通过控制器使用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}

请帮忙!

2 个答案:

答案 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)

我试了一下。我不确定你使用的是哪个版本的Rails。这是我的代码片段

我的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

还有其他方法可以实现工作路由,但这对我来说感觉更干净。如果您发布路线配置,那么找出问题会更容易。我希望这会对你有所帮助。