Rails 4 - 使用eager_load选择

时间:2016-06-20 13:37:02

标签: ruby-on-rails eager-loading

我正在尝试使用eager_load仅选择某些列,但我遇到了取消我的'select'的问题。

型号:

class Timeline < ActiveRecord::Base
    belongs_to :timeline_category, foreign_key: :timeline_category_id
    belongs_to :user, foreign_key: :user_id
    scope :with_relations, -> { eager_load(:timeline_category).eager_load(:user).order(created_at: :desc) 
end

查询:

Timeline.select('timelines.*, users.username, timeline_categories.icon').eager_load(:timeline_category).eager_load(:user)

我也试过了:

Timeline.select('timelines.*, users.username, timeline_categories.icon').with_relations

由于某种原因,它会不断选择所有3个表中的所有列。我该如何解决?

2 个答案:

答案 0 :(得分:2)

Rails 5引入了left_outer_joins方法。所以最终有可能:

Timeline.left_outer_joins(:timeline_category, :user)
        .select('timelines.*, users.username, timeline_categories.icon')

答案 1 :(得分:0)

我不确定是否可能,但你可以这样做:

relation = TimeLine.joins(:timeline_category, :user).select('users.username AS username, timeline_categories.icon AS categories_icon')

然后使用relation.each{ |timeline| puts "username: #{timeline.username} and icon: #{timeline.categories_icon}" }

获取这些字段