Rails模型关联:两个模型之间的多个关联

时间:2013-10-28 23:36:41

标签: ruby-on-rails-3 model-associations rails-models

我已经搜索过并发现了一些与此相关的内容,但似乎无法从帖子中找到有效的解决方案。

我的情况:我有用户和我有拼车;用户可能是拼车的司机(拼车可能只有一个车手)或者用户可能是拼车中的车手(拼车可能有多个车手)

这是我最近的尝试:

class Carpool < ActiveRecord::Base
  attr_accessible :rider_id

  belongs_to :driver, class_name: "User", foreign_key: "driver_id"

  has_many :riders, class_name: "User"

  def add_rider(user)
    self.riders << user 
  end
end

用户

class User < ActiveRecord::Base
  attr_accessible :driver_id

  has_many :carpools

  belongs_to :carpool, class_name: "Carpool", foreign_key: "rider_id"

end

相关架构转储:

create_table "users", :force => true do |t|
  t.string   "email",                  :default => "", :null => false
  t.string   "name"
  t.integer  "driver_id"
end

create_table "carpools", :force => true do |t|
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
  t.integer  "rider_id"
end

我想我可能在做外键时出错了......关系在司机/拼车[driver has_many:拼车]和车友/拼车[拼车has_many:车手]之间起作用的“后退”这一事实也在起雾我的脑子。

我做错了什么是完成这项工作的最佳方法?

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

根据#rubyonils上的convo,这种方法可能适合你(感谢砖块的要点):

class Carpool
  belongs_to :driver, class_name: "User" # Single Driver per Carpool

  has_many :carpool_riders
  has_many :riders, through: :carpool_riders

  # Schema:
  # driver_id
end
class CarpoolRider
  belongs_to :carpool
  belongs_to :rider, class_name: "User"

  # Schema:
  # carpool_id
  # rider_id
end
class User
  has_many :carpools_driven, class_name: "Carpool", foreign_key: "driver_id"

  has_many :carpool_riders
  has_many :carpools_ridden, through: :carpool_riders
end
相关问题