如何添加外键?表中的ID为空

时间:2015-10-28 01:12:36

标签: ruby-on-rails

我有三张桌子。帖子,回复,喜欢。用户(尚未实现)可以发布帖子,回复和喜欢回复,并留下他们喜欢的原因的简短评论。当回复留给帖子时,它会将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

2 个答案:

答案 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