gpt4 book ai didi

ruby-on-rails - Ruby on Rails 中多态模型的作用域

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:57 25 4
gpt4 key购买 nike

在以下情况下是否可以为多态模型创建作用域?

我有一个名为 Mutations 的多态模型。

class Mutation < ApplicationRecord
belongs_to :mutationable, :polymorphic => true
end

Mutation 属于 TimeRegistration 和 SickRegistration 这两个模型。 TimeRegistration 和 SickRegistration(可变)属于用户。

class SickRegistration < ApplicationRecord
belongs_to :user
has_many :mutations, as: :mutationable
end

class TimeRegistration < ApplicationRecord
belongs_to :user
has_many :mutations, as: :mutationable
end

我想为 Mutation 创建一个范围,借此我可以通过给定的用户名检索 Mutations 的集合。我在 Mutation 模型上已经有更多范围,因此必须将这个范围与其他使用的范围(用于过滤)结合起来。

所以在变异模型上是这样的:

 scope :with_name, -> (name) { joins(mutationable: :user).where('users.name = ?', name) }

这行不通。我还尝试在 Mutation 模型上创建一个委托(delegate),并在可变模型上创建一个具有多个连接的自定义 SQL 查询,但没有成功。我认为必须有一种(更简单的)方法来做到这一点,但我找不到任何好的例子或答案来解决这个问题。

请帮忙。提前致谢!

最佳答案

******试试这个*****

Mutation.rb

belongs_to :sick_registation, ->{where(mutations: {mutationable_type: 'SickRegistation'})},
foreign_key: 'mutationable_id'

belongs_to :time_registation, ->{where(mutations: {mutationable_type: 'TimeRegistation'})},
foreign_key: 'mutationable_id'

scope :with_name, ->(name){
joins(sick_registation: :user).where(user:{name: name}) +
joins(time_registation: :user).where(user:{name: name})
}

解释:您的多态关系和用户之间没有直接关系。所以,我加入了个人关联的结果,即生病和时间。

关于ruby-on-rails - Ruby on Rails 中多态模型的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46691022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com