从视图中调用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)) %>
调用它。