自定义路由到Rails 4中的自定义页面

时间:2014-04-29 14:57:03

标签: ruby-on-rails routes custom-routes ruby-on-rails-4.1

我的应用包含模式的父资源(has_many)和片段的子资源(belongs_to)。我的愿望是建立一些特定页面的自定义路线,我想知道最好的方法。现在,这是我的工作,但我想知道是否有更好的方法,因为我读到自定义路由的文章告诉我这不是一个好的做法。

我故意没有嵌套资源,因为片段需要独立存在以及在父模式的上下文中查看。

目标是能够创建一些自定义视图,如下所示:

http://patterns.dev/patterns/:id/snippets //Got this one working, but incorrectly I believe
http://patterns.dev/patterns/:id/snippets/sort // Show all snippets for pattern to sort
http://patterns.dev/patterns/:id/images // Show all the images for patterns to moderate

的routes.rb

Rails.application.routes.draw do

devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'}

resources :patterns
get 'patterns/:id/snippets' => 'patterns#snippets', as: 'pattern_snippets'

resources :snippets

root 'welcome#index'

end

1 个答案:

答案 0 :(得分:1)

我想nested resources就是你所需要的。您可以仅指定嵌套的索引操作,并分别保留所有代码段资源。您还要为snippets#index操作添加一些逻辑以检查params[:pattern_id]是否存在:

resources :patterns do
  # this line will generate the `patterns/:id/snippets` route
  # referencing to snippents#index action but within specific pattern.
  # Also you have to add pattern_id column to snippets table to define the relation
  resources :snippets, only: :index
end
resources :snippets

使用收集路由使Rails识别/patterns/:id/snippets/sort

之类的路径
resources :patterns do
  resources :snippets, only: :index do
    # this line will generate the `patterns/:id/snippets/sort` route
    # referencing to snippets#sort action but again within specific pattern.
    get :sort, on: :collection
  end
end
resources :snippets

如果你有Image模型,你可以像使用代码片段一样嵌套资源:

resources :patterns do
  resources :images, only: :index
end

如果它只是模式控制器中的一个动作,你可以这样做:

resources :patterns do
  get :images, on: :member
end