2012-04-29 4 views
0

Привет, У меня есть небольшая проблема с ассоциациями, я работаю с Rails 3.2, я хочу создать специальный блог, у этого блога много разделов, и в этом разделе есть много статей, а статья принадлежит категории. Так что мои модели:Модельная ассоциация

class Article < ActiveRecord::Base 
    belongs_to :section 
    belongs_to :category 

class Category < ActiveRecord::Base 
    has_many :articles 

class Section < ActiveRecord::Base 
    has_many :article 

Так статьи BELONGS_TO раздела, в routes.rb:

resources :sections do 
    resources :articles 
end 

Rake Маршруты:

     POST /sections/:section_id/articles(.:format)   articles#create 
new_section_article GET /sections/:section_id/articles/new(.:format)  articles#new 
edit_section_article GET /sections/:section_id/articles/:id/edit(.:format) articles#edit 
    section_article GET /sections/:section_id/articles/:id(.:format)  articles#show 
        PUT /sections/:section_id/articles/:id(.:format)  articles#update 
        DELETE /sections/:section_id/articles/:id(.:format)  articles#destroy 
      sections GET /sections(.:format)        sections#index 
        POST /sections(.:format)        sections#create 
     new_section GET /sections/new(.:format)       sections#new 
     edit_section GET /sections/:id/edit(.:format)      sections#edit 
      section GET /sections/:id(.:format)       sections#show 
        PUT /sections/:id(.:format)       sections#update 
        DELETE /sections/:id(.:format)       sections#destroy 

Так что мой вопрос, как я могу создать Categories_controller с индексировать и показывать действие. , чтобы показать статьи, принадлежащие к этой категории, и иметь ссылку_to в представлениях (Категория # show) для пути к статьям.

ответ

1

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

routes.rb

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

Это настроит маршруты, чтобы найти свои категории и статьи по категориям, но вам придется раскошелиться логику в ваших ArticlesController на params[:category_id] или params[:section_id] так:

class ArticlesController < ApplicationController 
    def index 
    if params[:section_id] 
     # handle section_articles_path to display articles by section 
    elsif params[:category_id] 
     # handle category_articles_path to display articles by category 
    else 
     # handle articles_path to display all articles (assuming you have resources :articles in routes) 
    end 
    end 
    # ... 
end 

Ссылка, чтобы показать статью, основанную на категории, затем будет использовать созданные вами методы поддержки маршрута.

категория/show.html.erb

<ul> 
    <% @category.articles.each do |article| %> 
    <li><%= link_to article.title, category_article_path(@category, article) %></li> 
    <% end %> 
</ul> 

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

Если вам не нужно обрабатывать контекст по-разному (доступ к статье через раздел против категории), я бы рекомендовал просто создание трех основных маршрутов (:articles, :sections:categories,) и оттуда.

+0

Спасибо, я думаю, что моя логика вчера провалилась, я искал доступ к статье без маршрута категории. Спасибо за ваш ответ! –

0

Это Очень простой match 'catagories' => "catagories#index" и match 'catagories/show/:id' => "catagories#show" В шоу действия @articles = Article.where("category_id",params[:id])

@articles = Article.where("category_id",params[:id]) Это позволит решить вашу цель

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