has_one通过has_many关系

时间:2014-07-10 10:31:55

标签: ruby-on-rails ruby

我有has_many关联

has_many :devices, through: :vehicles, foreign_key: :meid

我需要将last_device实现为has_one关系,以便将其与ransack gem一起使用,并且可以使用此类方法实现

def last_device
  devices.last
end

我尝试了一些变种,但我还没有设法让它运转

has_one :last_device, class_name: 'Device'

2 个答案:

答案 0 :(得分:0)

实际上我已经把它分成两部分来完成它

has_one :last_vehicle, -> { order('vehicles.created_at DESC') }, class_name: 'Vehicle'
has_one :last_device, through: :last_vehicle, source: :device, class_name: 'Device'

答案 1 :(得分:0)

不要认为按照你提议的方式做到这一点,'因为你没有正确的设置方法。

我唯一能想到的(如果你坚持使用hansack),就是在模型中添加last_device_id列,然后添加如下关系:

has_one :last_device, class_name: Device

虽然在将新设备添加到用户的车辆或最后一个设备被删除时,您需要更新该列。