Rails has_many OR条件

时间:2018-10-11 10:48:52

标签: ruby-on-rails ruby

我有一个任务,其中车库应从用户模型中提取汽车,或者如果用户没有汽车,则车库应从其自身中提取汽车。 理想情况下,我想为has_many关系提供所有Rails API。有机会这样做吗?

class Garage
  has_many :cars, through: :user || has_many :cars # pseudo-code
end

2 个答案:

答案 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