wol*_*lak 3 activerecord ruby-on-rails
我有四个模型类:
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
Run Code Online (Sandbox Code Playgroud)
我想找到特定组的所有事件.我认为这是一个has_many:通过关联,但是如何在Group上指定has_many来查找组的项目或个人事件中的所有事件?当然,我可以指定两个关联并连接结果,但是我必须在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
Run Code Online (Sandbox Code Playgroud)
如果你不像前一个那样喜欢SQL,那么总是可以使用单表继承.此解决方案取决于您的类属性和行为,但允许您使用"has_many through"关联.