【发布时间】:2017-07-10 12:44:57
【问题描述】:
我正在使用 Rails 5。我的控制器模型中有这个,用于加载符合条件的某个模型...
@results = MyObjectTime.joins(:my_object,
"LEFT JOIN user_my_object_time_matches on my_object_times.id = user_my_object_time_matches.my_object_time_id #{additional_left_join_clause}")
.where( search_criteria.join(' and '), *search_values )
.limit(1000)
.order("my_objects.day DESC, my_objects.name")
.paginate(:page => params[:page])
我的问题是,我如何重写上面的内容,以便@results 数组包含“MyObjectTime”和它所链接的任何潜在的“UserMyObjectTimeMatch”?
【问题讨论】:
-
您的 @results 变量将包含 MyObjectTime 实例的可枚举。没有一个对象是 MyObjectTime 的实例和 UserMyObjectTimeMatch 的任何关联实例。发出 1000 + 1 个查询的性能问题通过预先加载关联解决,使用 #includes(:user_my_object_time_matches)
-
“#includes(:user_my_object_time_matches)”会急切地加载所有关联吗?这不是我想要的,也不是我的查询所做的。查询只为每个 MyObjectTime 对象加载一个关联,这是我想急切加载的。
-
你能举个例子吗...可以帮助我进一步帮助你:)。谢谢
-
您能提供您的 ActiveRecord 模型的代码吗?最有可能的是,创建关联和范围的正确组合将解决您的问题并使您的代码更具可读性。关联范围:guides.rubyonrails.org/… 范围:api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/…
标签: ruby-on-rails search activerecord model ruby-on-rails-5