gpt4 book ai didi

ruby-on-rails - has_many :through association through two different associations

转载 作者:行者123 更新时间:2023-12-03 17:35:44 36 4
gpt4 key购买 nike

我有四个模型类:

class Group < ActiveRecord::Base
has_many :projects
has_many :personal_blogs
end

class Project < ActiveRecord::Base
has_many :events, :as => :event_producer
end

class PersonalBlog < ActiveRecord::Base
has_many :events, :as => :event_producer
end

class Event < ActiveRecord::Base
belongs_to :event_producer, :polymorphic => true
end

我想查找特定组的所有事件。我认为这是一个 has_many :through 关联,但是我如何在 Group 上指定一个 has_many 来查找组的项目 personal_blogs 中的所有事件?当然,我可以指定两个关联并将结果连接起来,但随后我必须在 Ruby 中重新排序、限制、条件等,这可能是许多事件的性能噩梦。我想在 ActiveRecord 中执行此操作以避免这样的噩梦。

最佳答案

你可以像下面这样在 Group 类中定义一个方法:

class Group < ActiveRecord::Base
has_many :projects
has_many :personal_blogs

def events
Event.find(:all, :conditions => ['(type = ? AND event_producer_id IN (?)) OR (type = ? AND event_producer IN (?))', 'project', project_ids, 'personal_blog', personal_blog_ids])
end
end

如果你不像前一个那样喜欢 SQL,那么使用单表继承总是可以的。此解决方案取决于您的 classes attributes and behavior ,但将允许您使用“has_many through”关联。

关于ruby-on-rails - has_many :through association through two different associations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344220/

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