Rails routes

программирование ruby ruby on rails rails RoR

Здравствуйте! У меня 2 вопроса по маршрутизации в Rails.
1. Как по умолчанию задать путь для постов post/:id вместо posts/:id? Аналогично и для пользователей user/:id вместо users/:id. ИМХО, смотрится как-то логичней при рассмотрении одного поста и соответственно одного пользователя.
Задал так:
resources :posts
match 'post/:id', :to => 'posts#show'

Оно, конечно, и по post/:id теперь работает, но по умолчанию из вьюшек <%= link_to post.title, post %> выводит ссылку на posts/:id, а не на post:id.

2. Реально ли сделать в роутинге автоопределение того, какое действие контроллера необходимо выполнить, в зависимости от введенных параметров (символов или числа), то есть определять что указано: категория или id поста?
post/:id
posts/:cat

Чтобы первый пример выводил пост с указанным id, а второй выдавал список постов в указанной категории. Или только подхватывать параметр и задавать в контроллере условия проверки на класс этого параметра?

Примечание:
Первый вопрос решил так (уж не знаю, насколько это Rails-way):
Вьюшка: <%= link_to post.title, post_path(post.id) %>
Маршрут: match 'post/:id', :to => 'posts#show', :as => :post

Примечание:
Второй вопрос решил также.

Примечание:
По второму вопросу, может, кому понадобится, в роутинге:
match 'post/:id', :to => 'posts#show', :as => :post, :id => /[0-9]/

Примечание:
Антон Витальевич (Антон Дьячук), почему-то не пришло уведомление о Вашем ответе, поэтому увидел его только сейчас. Я уже понял, что такой вариант не совсем рабочий. В частности, при указании match на posts#edit при редактировании просто ничего не сохраняется.
По пункту 2 сделал немного иначе...

# Роутинг
resources :posts, :id => /[0-9]/
match 'posts/:cat', :to => 'posts#cat', :as => :cat
match 'posts/cats', :to => 'posts#cat', :as => :cats

# Контроллер
def cat
@cat = Category.find_by_symlink(params[:cat])
if params[:cat] == "cats"
@cat = Category.all
render 'cats'
elsif @cat.blank?
flash[:error] = "Нет такой категории"
redirect_to cats_path
else
render 'catposts'
end
end

Думаю, это совсем не rails-way, однако, работает. Пока ничего лучшего не придумал. Таким образом у меня по /posts/cats выдаются все категории, по /posts/catname - записи в категории catname, и по /posts/5 - пост с id = 5.
Ответы:
1. не согласен, уже несколько лет как для многих это выглядит логичным
я надеюсь вы скоро устанете сингуляризовывать роутинги, когда в основе Rails REST плюрялизация
resources :posts, :except => :show, и роутинга на posts#show не будет
2.1. через params[:cat] - rubyway
2.2. через CategoriesController и resources :catgories, :only => :show
в def show
@posts = Post.where(:category => params[:id])
end
2.3. Через модель Categories которая has_many :posts
и Post :belongs_to :categories
resources :categories
и posts/:id?category=:category_id
и тогда
@category = Category.first(:conditions => ['id = ?', params[:category]])
@posts = @category.posts if @category
поиграйте с polymorphic routes
вот еще нашел
возможно вас заинтересует следующая RESTfull конструкция


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.