我的申请有订单的交易。在我的管理区域,我希望能够手动处理订单。
在我的访问/交易视图中
<%= 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
答案 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)) %>
调用它。