我有一个 collection 模型,拥有 fields 是:
class Collection < ActiveRecord::Base
attr_accessible :link,:tag,:collection_type,:content
end
:collection_type
有 3 种 string 类型的字段,articles,videos,images,
如果我想生成这样的 route:
/collections/articles/:id
/collections/videos/:id
/collections/images/:id
那我的 routes 要如何设置呢?
还有就是如果我想批量显示 articles,那是否可以生成这样的 url:
/collections/articles
?
我现在的 route 是这样写的
resources :collections do
member do
get 'articles'
get 'videos'
get 'images'
end
end
但是毕竟这样的话,就属于硬编码了,扩展性不佳。是否有改进之处?我想到的是把 collection_type 也作为一种 resources 来处理。
经过修改,得到了预期的 url routes 映射
resources :users do
resources :collections do
get 'articles',on: :collection
get 'videos', on: :collection
get 'images', on: :collection
end
end
以上代码就可以映射出
articles_user_collections GET /users/:user_id/collections/articles(.:format) collections#articles
videos_user_collections GET /users/:user_id/collections/videos(.:format) collections#videos
images_user_collections GET /users/:user_id/collections/images(.:format) collections#images
虽然得到了预期的效果,但是'articles','videos'和'images'依然是硬编码,能否通过某种途径利用 collection 模型的 collection_type 字段来取代这三个值呢?