在嵌套资源中调用自定义操作(Rails 3)

时间:2013-05-23 17:32:47

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

我正在尝试为嵌套在另一个资源中的资源调用自定义控制器操作 shuffle 。我似乎无法正确调用方法。

的routes.rb

resources :templates do
  resources :items
end

match "/templates/:template_id/items/shuffle" => "items#shuffle"

我的项目#index view中有一个链接:

<%= link_to 'Shuffle', shuffle_template_items_path(@template) %>

当我点击链接时,出现以下错误:

undefined method `shuffle_template_items_path' for #<#<Class:0x42577c8>:0x3e77578>

我也尝试了<%= link_to 'Shuffle', template_items_shuffle_path(@template) %>,但是没有用。

如何正确调用此自定义操作?

3 个答案:

答案 0 :(得分:4)

你可能想要这个:

resources :templates do
  resources :items do
    get :shuffle, :on => :collection
  end
end

答案 1 :(得分:1)

如果您希望自定义操作具有名称,则需要提供该名称:

match "/templates/:template_id/items/shuffle" => "items#shuffle", :as => :suffle_template_items

答案 2 :(得分:1)

根据Rails Routes的文档,我认为编写shuffle的最佳方法是收集:

所以它看起来像这样:

  resources :templates do
    resources :items do
      collection do
        get :shuffle
      end
    end
  end

当您尝试rake routes时,您会找到shuffle_template_items GET /templates/:template_id/items/shuffle(.:format) items#shuffle