Rails高级关联

时间:2010-11-20 11:15:53

标签: ruby-on-rails associations

我想像这样做:

class MyModel < ActiveRecord::Base
  has_many :locations
  has_one :location, :class_name => 'Location', :join => "RIGHT JOIN locations ON locations.user_id=mymodels.user_id"
end

所以MyModel虽然位置很多,但每个用户只能有一个位置。 我该如何定义? THX!

2 个答案:

答案 0 :(得分:4)

命名关联,使得您对模型名称的复数形式和单数形式都有关联可能会造成混淆,也可能导致方法重叠。除了最佳实践,您通常不需要提供原始SQL。你的情况也不例外。

看起来MyModel也属于User。用户似乎与Locations有一对多的关系,那么你可以这样做:

根据发布的SQL假设以下模型:

class User < ActiveRecord::Base
  has_many :my_models
  has_many :locations
end

class Location <ActiveRecord::Base
  belongs_to :my_model
  belongs_to :user
end



class MyModel < ActiveRecord::Base
  has_many :locations
  belongs_to :user
  has_one :user_location,  through => :user, :source => :location
end

但是,如果用户位置很多,您不知道要获得哪个位置。但如果至少有一个,你就可以保证一个。

答案 1 :(得分:2)

我可能错了......

class MyModel < ActiveRecord::Base
  has_many :location
  belongs_to :user
end

class Location< ActiveRecord::Base
  belong_to :my_model
end

class User< ActiveRecord::Base
  has_one :my_model
end

您可以使用MyModel.first.user.location

获取用户位置