【问题标题】:Calling Controller Method in link_to from the view从视图中调用 link_to 中的控制器方法
【发布时间】:2011-07-27 15:54:02
【问题描述】:

我的应用程序有带有订单的交易。在我的管理区域中,我希望能够手动处理订单。

在我的访问/交易视图中

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

在我的访问/交易控制器中

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 方法以在我的管理/交易控制器中调用 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

【问题讨论】:

  • 是 access_deals_process_orders_path 吗?
  • 它最终成为了 process_orders_access_deal_path(deal) 但由于@Kevin-Tsoi 我不得不添加一条新路线
  • 我在正确的轨道上!只是完全倒退和错误:P

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


【解决方案1】:

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

创建自定义路由:

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

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

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

      resources :deals do
        get :process_orders
        resources :orders
      end
      

      并使用&lt;%= link_to("Process Orders", deal_process_orders(deal)) %&gt; 调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多