Здравствуйте! У меня 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.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.