Ruby on Rails:多态关联,关联表

时间:2014-02-23 05:55:37

标签: ruby-on-rails ruby ruby-on-rails-3 associations polymorphic-associations

我正在研究多态关联,但如何在数据库中正确调用某些值。

如果我有这些表

书桌

 id | title            
  1 | give me something
  2 | more title names please

作者表

 id | name
  1 | Author Goods

审核表

 id | author_id | reviewable_id | reviewable_type | review
 1  |    1    |       1       |       Book        | Don't read this book
 2  |    2    |       2       |       Book        | This book is awesome
 3  |    2    |       1       |      Author       | Love this author

我的控制器看起来像这样:

@reviews = Review.where(user_id: current_user)

我的html循环如下:

<% @reviews.each do |r| %>
  <%= r.author %> <!-- this will give me author information -->
<% end %>

使用r.author,我可以从作者那里获取信息,但如果我尝试使用reviewable_type访问作者和图书的信息该怎么办?我无法做r.reviewable_type,因为没有id关联。如果我的评论表格中没有book_idauthor_id,如果我通过可审核的唯一关联,如何获取预订信息type是表的名称而不是id?

我希望我对我的问题的解释是有道理的。

1 个答案:

答案 0 :(得分:0)

首先,如果它是多态的,你在评论中不需要author_id。

你的review.rb应该是

class Review < ActiveRecord::Base
    belongs_to :reviewable, polymorphic: true
end

和你的book.rb

class Book < ActiveRecord::Base
    has_many :reviews, as: :reviewable, dependent: :destroy
end

类似应该是你的作者.rb也是

现在你不需要直接查询Review表,如果你想要所有current_user评论 只需做

@reviews = current_user.reviews

它将从reviews table获取所有记录,其中包含reviewable_id == current_user.id和reviewable_type ==“User”

您也可以同样查询图书评论。