我搜索并找到了一些与此相关的东西,但似乎无法从帖子中找到一个可行的解决方案。
我的情况:我有用户,我有拼车;一个用户可能是一个拼车的司机(一个拼车可能只有一个司机),或者一个用户可能是一个拼车的车手(一个拼车可能有多个车手)。
以下是我的最新尝试:
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我想我可能把外键弄坏了.事实上,这种关系在司机/拼车司机has_many之间起“背靠背”的作用:拼车和拼车、拼车、has_many :骑手之间的关系也给我的大脑蒙上了一层雾。
我做错了什么?做这件事最好的方法是什么?
任何帮助都是非常感谢的,谢谢!
发布于 2013-10-29 00:16:56
根据convo on #rubyonrails,这种方法可能对您有用(谢谢bricker提供的要点):
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
endclass CarpoolRider
belongs_to :carpool
belongs_to :rider, class_name: "User"
# Schema:
# carpool_id
# rider_id
endclass User
has_many :carpools_driven, class_name: "Carpool", foreign_key: "driver_id"
has_many :carpool_riders
has_many :carpools_ridden, through: :carpool_riders
endhttps://stackoverflow.com/questions/19647074
复制相似问题