从视图中调用link_to中的Controller方法

我的申请有订单的交易。 在我的管理区域,我希望能够手动处理订单。

在我的访问/交易视图中

 

在我的access / deals_controller中

 def process_orders @deals = Deal.find(params[:id] @orders = @deals.orders.where("state" == ?, "pending") @orders.each do |order| #order processing code here end end 

我应该如何构建我的link_to方法来调用admin / deals控制器中的process_orders方法?

我觉得有点像

  

它给了我以下url

  localhost:3000/access/deals/9 

我怎么得到类似的东西

 localhost:3000/access/deals/9/process_orders 

我也很乐意接受有关将processing_orders方法移动到模型或帮助器的建议,如果这是更好的方法。

我摘录了我的路线档案。

  resources :deals do resources :orders end namespace "access" do resources :deals, :podcasts, :pages, :messages end 

您可以执行以下操作之一:

创建自定义路线:

 match 'access/deals/:id/process_orders' => 'access/deals#process_orders', :as => 'access_deal' 

然后你可以使用这个link_to:

 <%= link_to "Process Orders", access_deal_path(deal) %> 

要么

添加会员路线:

 namespace "access" do resources :deals do member do get :process_orders end end end 

你的link_to看起来像这样:

 <%= link_to "Process Orders", process_orders_access_deal_path(deal) %> 

如果你可以使用一个非常好的特定_path,但我知道我一直处于需要更明确控制的情况。

这里的Ruby API: http : //api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

给出这个例子:

 link_to "Profile", :controller => "profiles", :action => "show", :id => @profile 

如果将process_orders方法移动到OrdersController会更好,但这是您的决定。

要使代码正常工作,只需将此路由添加到routes.rb

 resources :deals do get :process_orders resources :orders end 

并使用<%= link_to("Process Orders", deal_process_orders(deal)) %>调用它。