2014-09-05 5 views
0

У меня есть следующие модели:Как создать вложенные маршруты с родительским по умолчанию в рельсах?

class Article < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
end 

Статьи вложенными по категориям, как это:

resources :categories, only: [] do 
    resources :articles, only: [:show] 
end 

, который дает мне следующий маршрут

GET /categories/:category_id/articles/:id articles#show 

Чтобы использовать это в моих взглядах сделать мне нужно написать

link_to category_article_path(article.category, article) 
    # => "/categories/1/articles/1 

Их нет ни одного article_path, все статьи всегда будут вложены в соответствующую категорию. Однако мне было интересно, если их это способ для меня СУХОГО это так я мог бы просто написать

link_to article_path(article) 
    # => "/categories/1/articles/1 

и до сих пор маршрут вложенным под категорией.

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

Поэтому в основном я искал что-то вроде этого

# Example, doesn't work (article_id is not available here): 
resources :categories, only: [] do 
    resources :articles, only: [:show], defaults: { category_id: Article.find(article_id).category.id } 
end 

Однако, что не работает, так как article_id не доступен по умолчанию в блок. Насколько я знаю, вы можете создавать только статические значения по умолчанию, и мне нужна динамическая, основанная на текущей статье.

ответ

1

Вы можете добиться того, чего хотите, наложив на свой ресурс свой ресурс, как если бы вы делали это по обычным маршрутам.

resources :categories, only: [] do 
    resources :articles, only: [:show], defaults: { category_id:Article.find(article_id).category.id }, as: 'article' 
end 

Теперь вы можете использовать article_path(article) вместо category_article_path

+0

Я не понимаю, что вы имеете в виду? Не могли бы вы объяснить немного больше? Если я напишу эту строку, это ничего не изменит ... – jokklan

+0

Пожалуйста, проверьте изменение –

+0

. Ох хорошо, но проблема в том, что 'defaults: {category_id: Article.find (article_id) .category.id}' doesn Не работает, поскольку article_id недоступен, вы не можете создавать динамические значения по умолчанию. – jokklan

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