2014-01-25 5 views
1

У меня есть 3 модуля Блог, новости, статьи и сборные обзоры для всех.как показать полиморфную запись ruby ​​on rails

class Review < ActiveRecord::Base 
attr_accessible :reviewable_type,:reviewable_id,:description,:context,:language,:status, :title, :user_id,:review_category_id,:ratings 
    belongs_to :user 
    belongs_to :review_category 
    belongs_to :reviewable, :polymorphic => true 

class Blog < ActiveRecord::Base 
attr_accessible :description, :status, :title 
has_many :reviews, :as => :reviewable, :dependent => :destroy 

class News < ActiveRecord::Base 
attr_accessible :description, :status, :title 
has_many :reviews, :as => :reviewable, :dependent => :destroy 

class Article < ActiveRecord::Base 
attr_accessible:description, :status, :title 
has_many :reviews, :as => :reviewable, :dependent => :destroy 

Мой вопрос: как получить все отзывы, размещенные в блоге, статье, новостях и т. Д.?

ответ

1

Точно так же, как вы связываете другие отношения has_many. Как это:

current_user.blogs.first.reviews 
current_user.articles.first.reviews 
current_user.news.first.reviews 

В вашем шоу странице блога,

@blog.reviews.each |r| 
    r.review_text 
end 
+0

Есть ли способ, что я могу использовать их в одной строке ????? current_user.blogs.first.reviews current_user.articles.first.reviews current_user.news.first.review
** жирный ** Я имею в виду current_user.reviewable.review , потому что я мог бы иметь много модулей в будущем, где отзывы потребуется –

1

Потому что вы пытаетесь призвать к user, я бы рекомендовал смотреть на User модели тоже:

#app/models/user.rb 
Class User < ActiveRecord::Base 
    #User can submit many reviews 
    has_many :reviews 

    #User can submit many blogs/news/articles 
    has_many :blogs 
    has_many :news 
    has_many :articles 

    def first_blog 
     blogs.first 
    end 
end 

#app/models/review.rb 
class Review < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :review_category 
    belongs_to :reviewable, :polymorphic => true 
end 

#app/models/blog.rb 
class Blog < ActiveRecord::Base 
    belongs_to :user 
    has_many :reviews, :as => :reviewable, :dependent => :destroy 

    def first_review 
     reviews.first 
    end 
end 

#app/models/news.rb 
class News < ActiveRecord::Base 
    belongs_to :user 
    has_many :reviews, :as => :reviewable, :dependent => :destroy 
end 

#app/models/article.rb 
class Article < ActiveRecord::Base 
    belongs_to :user 
    has_many :reviews, :as => :reviewable, :dependent => :destroy 
end 

Обзоры

Это позволит вам позвонить:

######### 
#Reviews# 
######### 

#Submitted 
current_user.reviews 

#Received 
current_user.first_blog.first_review 
current_user.first_blog.reviews 
Смежные вопросы