0

我正在尝试实现类似“facebook like”的关系。我想为此使用继承,所以这是我的结构:

带有 user_id:integer 属性的 Like |> PostsLike 继承了带有 post_id:integer 属性的 Like

所以这是我的 Like.rb 模型:

class Like < ActiveRecord::Base
  belongs_to :user
end

然后是我的 PostLike.rb 模型:

class Postlike < Like
  belongs_to :post
end

最后我有一个帖子模型,它将有多个 postlikes 对象:

class Post < ActiveRecord::Base

  has_many :postlikes

end

但这是我的问题,当我进入 irc 时:

  1. 我得到一个 Post 对象:

    ruby-1.9.2-p290 :001 > @p = Post.all.first

  2. 我尝试获取此对象的 postlikes,这是 sql 语句:

    选择likes.* 从likes哪里likestype在('Postlike')和likespost_id= 310

所以基本上不是做

postlikes.post_id

Rails 的做法

喜欢.post_id

有什么想法可以解决吗?

4

1 回答 1

1

ActiveRecord 将 Like 和 Postlike 对象存储在名为“likes”的同一张表中,并使用名为“type”的列来保存对象的类。这解释了声明:

WHERE likes.type IN ('Postlike') AND likes.post_id = 310

没有桌子postlikes

请参阅http://api.rubyonrails.org/classes/ActiveRecord/Base.html上的“单表继承”一章

于 2012-01-28T10:02:48.883 回答