我有三张桌子。帖子,回复,喜欢。用户(尚未实现)可以发布帖子,回复和喜欢回复,并留下他们喜欢的原因的简短评论。当回复留给帖子时,它会将post_id(foregin_key)与reply_id一起保存。但是当为Like做出评论时,只传递like_id,而不是reply_id和post_id。与控制器无关,但我的调试器显示发布时表单中的reply_id和post_id为空。无论如何,这是我的桌子。
Post.rb
has_may :replies
has_many :likes
Reply.rb
has_many :likes
belongs_to :post
Like.rb
belongs_to :reply
belongs_to :post
迁移:
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :name
end
end
end
class CreateReplies < ActiveRecord::Migration
def change
create_table :replies do |t|
t.string :reply
t.belongs_to :post, index:true
end
end
end
class CreateLikes < ActiveRecord::Migration
def change
create_table :likes do |t|
t.integer :thumbs
t.string :comment
t.belongs_to :post, index:true
t.belongs_to :reply, index:true
end
end
end
答案 0 :(得分:1)
喜欢需要polymorphic。这样,你就不会有一个nil字段,你'可爱'字段只会与回复或帖子有关。这实际上是何时使用多态性的典型示例。
答案 1 :(得分:1)
是的,polymorphic relations是前往这里的方式。
你会像这样创建你喜欢的模型:
rails g model Like likeable_type:string likeable_id:integer...any other fields
然后在帖子和回复中你会这样做:
has_many :likes, as: :likeable