Rails 4使用多重关联来生成过滤后的关联

达卡

我在Rails 4.1中有一个有趣的关联,我正在尝试设计,但似乎无法提出正确的方法来做,所以以为我会寻求帮助。

本质上,我们有四个重要的模型:FamilyActivityTemplateDeviceDeviceType一个家庭有许多设备,设备属于设备类型,而活动模板具有设备类型(请考虑:此活动支持这些设备类型)。第五个模型是我们的FamilyActivity,它属于Family和ActivtyTemplate。

我正在尝试获取可用familyActivityInstance.available_devices列表或者,换句话说,我们根据Family.devices-> DeviceType关联知道在FamilyActivity中可以使用哪些DeviceType,并且,我们知道该活动通过其FamilyActivity.activity_template-> DeviceType关联仅支持某些设备类型,因此,我们希望提供两个设备类型关联列表中都包含的Family.devices子集的列表。

理想情况下,我们希望调用FamilyActivity.available_devices来获取该列表。我们可以通过遍历设备并比较设备类型来强行执行此操作,但是肯定有更好的方法!

以下是仅供参考的模型:

class Family < ActiveRecord::Base
  has_many :devices
end

class Device < ActiveRecord::Base
  belongs_to :device_type
  belongs_to :family
end

class DeviceType < ActiveRecord::Base
  has_and_belongs_to_many :family_activities
end

class FamilyActivity < ActiveRecord::Base
  belongs_to :family
  belongs_to :activity_template
end

class ActivityTemplate < ActiveRecord::Base
  has_and_belongs_to_many :device_types
  has_many :family_activities, dependent: :nullify
end
二手烟

除了您现有的关联之外:

class DeviceType < ActiveRecord::Base
  has_many :devices
end

class FamilyActivity < ActiveRecord::Base
  delegate :device_types, to: :activity_template

  def available_devices
    device_ids = \
      device_types.
      joins(:devices).
      where(devices: {family_id: self.family_id}).
      pluck("DISTINCT devices.id")

    Device.where(id: device_ids)
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4使用多重关联来生成过滤的关联

来自分类Dev

关联条件Rails 4

来自分类Dev

关联条件Rails 4

来自分类Dev

构建关联 Rails 4

来自分类Dev

在 Rails 中使用空关联过滤 AJAX 数据表

来自分类Dev

Rails 4:form_for与关联

来自分类Dev

Rails 4多个ActiveRecord关联

来自分类Dev

Ruby on Rails 4中的关联

来自分类Dev

Rails 4,嵌套关联搜索

来自分类Dev

编写关联范围-Rails 4

来自分类Dev

Rails关联关联

来自分类Dev

Rails:获取关联关联

来自分类Dev

Rails使用“ has_many”关联生成模型

来自分类Dev

使用Rails创建关联的模型

来自分类Dev

使用关联的Ruby on Rails订单

来自分类Dev

如何使用Ruby on Rails关联?

来自分类Dev

rails 4-使用has_and_belongs_to_many关联

来自分类Dev

Rails 4:使用表单对象时验证关联的ActiveRecord模型

来自分类Dev

使用Rails 4以简单的形式设计多态关联嵌套属性

来自分类Dev

rails 4-使用has_and_belongs_to_many关联

来自分类Dev

通过Rails 4中的关联使用has_many

来自分类Dev

如何使用Rails 4 + PostgreSQL查询关联记录的列表?

来自分类Dev

Rails 4-链接模型关联以访问关联的方法

来自分类Dev

Rails 4-多态关联-嵌套属性

来自分类Dev

Rails 4-Railscast#154多态关联

来自分类Dev

基于关联Rails4的搜索查询

来自分类Dev

如何搜索Rails中的关联4

来自分类Dev

选择类别:Rails 4多对多关联

来自分类Dev

被Rails 4关联错误所混淆