我正在研究多态关联,但如何在数据库中正确调用某些值。
如果我有这些表
书桌
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_id
列author_id
,如果我通过可审核的唯一关联,如何获取预订信息type是表的名称而不是id?
我希望我对我的问题的解释是有道理的。
答案 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”
您也可以同样查询图书评论。