我想像这样做:
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!
答案 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
获取用户位置