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

时间:2011-07-27 15:54:03

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

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

在我的访问/交易视图中

<%= link_to "Process Orders", "Not sure what I put here?" %>

在我的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方法?

我想像

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

给我以下网址

 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

3 个答案:

答案 0 :(得分:4)

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

创建自定义路线:

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

然后你可以使用这个link_to:

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

OR

添加会员路线:

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) %>

答案 1 :(得分:2)

如果你可以使用一个特别的_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

答案 2 :(得分:1)

process_orders方法移至OrdersController会更好,但这是您的决定。

要让您的代码正常运行,只需将此路线添加到routes.rb

即可
resources :deals do
  get :process_orders
  resources :orders
end

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