Rails:单个表中有2个用户ID?

时间:2014-11-22 18:13:30

标签: ruby-on-rails rails-activerecord

我想这样做以便以下内容将返回收到的所有消息:

current_user.messages.received

以下内容将使我看到所有已发送的消息:

current_user.messages.sent

我遇到的问题是我不确定如何指定单个表中的2列都代表用户的外键。如何将sender_id和recipient_id与用户关联?

分贝/ schema.rb

  create_table "messages", force: true do |t|
    t.string   "notification",      null: false
    t.integer  "user_id",      null: false
    t.datetime "created_at",   null: false
    t.datetime "updated_at",   null: false
    t.integer  "recipient_id", null: false
  end

应用/模型/ message.rb

class Messages < ActiveRecord::Base
  has_and_belongs_to_many :user
end

应用/模型/ user.rb

class User < ActiveRecord::Base
  has_and_belongs_to_many :messages, dependent: :destroy
end

1 个答案:

答案 0 :(得分:0)

在这种情况下,每封邮件只有一个发件人和可能的多个收件人 所以你的模型可能是:

class Messages < ActiveRecord::Base
  has_and_belongs_to_many :receivers, class_name: 'User'  
  belongs_to :sender, class_name: 'User'  
end

class User < ActiveRecord::Base
  has_many :messages, dependent: :destroy
  has_and_belongs_to_many :received_messages, class_name: 'Message'
end

你需要一个联接表来发送消息&#34;:

class CreateJoin < ActiveRecord::Migration
  def change
    create_join_table :users, :messages
  end
end

现在您可以访问已发送和已接收的消息:

current_user.messages # sent messages
current_userreceived_messages