Я не уверен, что это полностью в духе REST (я еще не до конца понимаю), поэтому я оставлю эту часть вопроса кому-то еще. Поскольку существует collection
метод для расширения маршрутов RESTful , я предполагаю, что он разрешен, если вы не злоупотребляете им.
Однако я не думаю, что наличие маршрутов без префикса "/ posts /" - это хорошо, потому что, к примеру, путь "/ music /" относится к совершенно другому ресурсу.
Вы можете сделать что-то вроде этого:
(в rout.rb)
resources :posts do
collection do
get 'music'
get 'movies'
end
end
... и затем добавьте индексные действия в свой контроллер, например ::
def music
@posts = Post.where( category: 'music')
render :index
end
если у вас есть ограниченный и постоянный набор категорий, это можно высушить следующим образом:
class Post < ActiveRecord::Base
CATEGORIES = [:music,:movies,:art,:jokes,:friends,:whatever].freeze
end
class PostsController < ApplicationController
Post::CATEGORIES.each do |category|
eval <<-INDEX_LIKE_ACTIONS
def #{category}
@posts = Post.where( category: '#{category}' )
render :index
end
INDEX_LIKE_ACTIONS
end
end
resources :posts do
collection do
Post::CATEGORIES.each {|category| get category.to_s}
end
end