我有一个任务,其中车库应从用户模型中提取汽车,或者如果用户没有汽车,则车库应从其自身中提取汽车。 理想情况下,我想为has_many关系提供所有Rails API。有机会这样做吗?
class Garage
has_many :cars, through: :user || has_many :cars # pseudo-code
end
答案 0 :(得分:0)
解决您的问题所需的完整代码尚不清楚,但是从广义上讲,这就是我将如何执行这种结构性迁移。
首先,定义两个明确的关联:
class Garage < ApplicationRecord
has_many :user_cars, through: :user, class_name: 'Car'
has_many :cars
end
然后添加一些尝试同时获取两者的方法,如您所述:
class Garage < ApplicationRecord
has_many :user_cars, through: :user, class_name: 'Car'
has_many :cars
def cars
user_cars.presence || super
end
end
然后,当数据全部迁移到新结构后,您可以删除旧的关联:
class Garage < ApplicationRecord
has_many :cars, through: :user
end
答案 1 :(得分:0)
我只是用不同的名称命名关联,并使用一种方法来加载汽车:
has_many :cars
has_many :user_cars, through: :user, source: :cars
def all_cars
user_cars.presence || cars
end