我正在尝试使用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个表中的所有列。我该如何解决?
答案 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}" }