2013-08-29 2 views
0

, что мне нужно, это маршрутизации дляРазличные URL, используя те же действия

resources :posts 

но учитывая каждый пост объект имеет разные категории (категория представляет собой столбец в базе данных, не ссылается объект!), Категории сохраняются в Page::CATEGORIES. в нижней строке, мне нужно, например. 'www.example.com/posts/admin_posts' маршрут в post/index action, но с параметром 'admin_posts', поэтому я могу использовать его в области. я надеюсь, что я сделал себя ясно :) Я НЕ хочу больше действий, и определенно не хочу определять каждый маршрут отдельно, все они должны исходить от Page::CATEGORIES. Любая идея, как это сделать?

EDIT

я редактирую этот вопрос, так как это не совсем ясно

имея модель Post, с категорией колонки и все категории, хранящуюся в Post::CATEGORIES, моя цель состоит в том, чтобы иметь маршрут для каждой категории , но каждый маршрут принимает его в прежнее действие индекса.

def index 
    @posts = Post.by_category(category) 
end 

сейчас, категория здесь, является аргументом в пользу сферы, что позволит мне получить только те сообщения, которые указаны в маршруте. Например, сообщения/stupid_posts будут делать category = "stupid_posts", а @posts - только stupid_posts. действительно надеюсь, что сейчас лучше.

+1

Пожалуйста, покажите нам, что вы пробовали (и отредактируете свой вопрос, чтобы сделать его более понятным) –

+0

i havent попробовал что-нибудь, так как я не знаю, как это сделать. что непонятно? – Leo

+0

Ну, в отношении запросов о закрытом голосовании ...Кажется, да –

ответ

0

Я собираюсь взять пунт на этот вопрос. Но я настоятельно рекомендую вам посмотреть на rails routing section.

Поскольку у вас есть категории в константе Page::CATEGORIES, вы можете написать для этого помощника. Вот быстрый и грязный способ для краткости:

- Page::CATEGORIES.each do |cat| 
    = link_to cat, posts_path(category: cat) 

Цикл по категориям страниц и поставить их в Params хэш. Затем в методе контроллера, который просматривает сообщения, у вас будет доступ к params[:category]. Используйте его для запроса соответствующих сообщений.

1

Вы можете проложить маршрут, как это:

get '/posts/:category', to: 'posts#index', 
    constraints: { category: Regexp.new(Post::CATEGORIES.join('|')) } 

Тогда в index вы можете получить категорию через params[:category]:

def index 
    @posts = Post.by_category(params[:category]) 
end 
+1

это выглядит интересным, попробуем попробовать – Leo

+0

: нужно ли это «получить» сообщения .. «быть внутри блока ресурсов?», Во-вторых: как выглядит пример url? Сообщения/stupid_posts или сообщения /: stupid_posts? – Leo

+0

Нет, это отдельный маршрут, который должен находиться над блоком ресурсов. URL будет «posts/stupid_posts». – Mischa

0

Я бы на самом деле сделать это наоборот. Из иерархии точки зрения, должности относятся к категории, а не категория относится к должности (независимо от того, как вы смоделировали его в базе данных), поэтому я хотел бы использовать следующие маршруты:

scope ":category" do 
    resources :posts, as: :category_posts 
end 

Это будет путь к posts контроллер, и будет иметь params[:category], доступный по каждому запросу.

Внутри контроллера я бы проверял, действительно ли существуют параметры [: category] и возвращает 404, если это не так.

Смежные вопросы