积极记录协会?

时间:2014-11-15 23:56:31

标签: ruby-on-rails associations schema rails-activerecord

我试图实现以下内容,关系和对象调用,并想知道我是否需要一个单独的表以及这些关联如何工作。

用户可以留下许多笔记(user.notes)A Note可以有一个发件人(note.sender)

用户可以收到许多笔记(user.notes)。 Note可以有许多接收器(notes.recipient)。注释可以由收件人查看。

用户可以选择收件人。 用户可以选择多个收件人。

收件人可以查看每个笔记一次。 一旦笔记的所有收件人都看过笔记,笔记就会被销毁。

我的架构如下所示:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :first
      t.string :last
      t.string :email
      t.string :username
      t.string :pw
      t.string :devicetoken

      t.timestamps
    end
  end
end

class CreateNotes < ActiveRecord::Migration
  def change
    create_table :notes do |t|
      t.integer :user_id
      t.integer :recipient_id
      t.text :note_text
      t.datetime: viewed_at
      t.datetime :expiration

      t.timestamps
    end
  end
end

我的模特看起来像这样:

class User < ActiveRecord::Base
  has_many :notes
end

class Note < ActiveRecord::Base
    belongs_to :user, foreign_key: 'user_id', class_name: 'User'
    belongs_to :user, foreign_key: 'recipient_id', class_name: 'User'
end

但我无法提取笔记的收件人ID,但我无法告诉哪位收件人已查看该笔记。

1 个答案:

答案 0 :(得分:1)

我怀疑你遇到了麻烦,因为你为同一个符号定义了两个belongs_to。试着这样做:

class Note < ActiveRecord::Base
    belongs_to :user, foreign_key: 'user_id', class_name: 'User'
    belongs_to :recipient, foreign_key: 'recipient_id', class_name: 'User'
end

然后尝试拨打note.recipient