使用Rails 3路由获取资源内的命名空间

时间:2013-07-09 17:15:32

标签: ruby-on-rails rails-routing

我有一个书籍模型,其中定义了各种路线:

resources :books do
    member do
      get 'printable_version'
    end
    collection do
      get 'search'
      get 'recently_added'
    end
    resources :pages do
      collection do
        get 'new'
        get 'edit_all'
        post 'update_all'
      end
    end
  # I put a namespace declaration here 
  # namespace :marketing do 
  #   get 'mini_flyer'
  # end
  end

我现在想要的是“营销”“子目录”,这意味着我希望能够访问这样的路线:

/books/24/marketing/mini_flyer/book/10/marketing/large_flyer

我试图将一个名称空间放入资源块,但这是我从rake routes得到的:

book_marketing_mini_flyer GET    /books/:book_id/marketing/mini_flyer(.:format) marketing/books#mini_flyer

这条路线与/app/controllers/marketing/books_controller.rb匹配,当我真的希望它转到/app/controllers/books/marketing_controller.rb时。这可能吗?

- 编辑 -

我也可以走这条路(双关语):

resources :books do
  resource :marketing, to: "books/marketing" do
    collection do
      get 'mini_flyer'
    end
  end 
end

虽然,我不确定这是否最好。

2 个答案:

答案 0 :(得分:1)

为什么不用控制器和模型构建嵌套的Marketing资源(记住,模型不必与AR表相关,可能是一个简单的ruby类),就像你做的那样与Page。然后,此资源的id将由larde_flyermini_flyer等提供,您可以通过控制器中的白名单进行验证(例如,使用before_filter)。

答案 1 :(得分:1)

是按照您的编辑路线进行小幅更改

resources :books do
  resources :marketing do
    collection do
      get :mini_flyer
      get 'larde_flyer'
    end
  end 
end

它会工作,我认为这将是最好的