Ruby on rails 如何在不使用联接模型的情况下,按同一模型上的列对模型上的所有对象进行分组?

Ruby on rails 如何在不使用联接模型的情况下,按同一模型上的列对模型上的所有对象进行分组?,ruby-on-rails,activerecord,ruby-on-rails-5,Ruby On Rails,Activerecord,Ruby On Rails 5,我有一个模型位置,其模式如下: # Table name: positions # # id :bigint not null, primary key # action :integer # current_price :float # current_value :float # status :integer default("0") # ticker

我有一个模型位置,其模式如下:

# Table name: positions
#
#  id                :bigint           not null, primary key
#  action            :integer
#  current_price     :float
#  current_value     :float
#  status            :integer          default("0")
#  ticker            :string
#  volume            :integer
#  created_at        :datetime         not null
#  updated_at        :datetime         not null
#  portfolio_id      :integer
#  stock_id          :integer

  belongs_to :portfolio
  belongs_to :stock
我的用户模型如下所示:

  has_one :portfolio, dependent: :destroy
  has_many :positions, through: :portfolio, dependent: :destroy
class Portfolio < ApplicationRecord
  belongs_to :user
  has_many :positions
end
我的投资组合模型如下所示:

  has_one :portfolio, dependent: :destroy
  has_many :positions, through: :portfolio, dependent: :destroy
class Portfolio < ApplicationRecord
  belongs_to :user
  has_many :positions
end
但是,在理想情况下,我只想在第一个查询中执行此操作

我尝试了以下方法,但都不起作用

current_user.positions.buy.open.group("ticker")
=> #<Position::ActiveRecord_AssociationRelation:0x3ffdf189d6d4>

current_user.positions.buy.open.order(transaction_date: :desc).group("ticker.name")
      Position Load (2.9ms)  SELECT "positions".* FROM "positions" INNER JOIN "portfolios" ON "positions"."portfolio_id" = "portfolios"."id" WHERE "portfolios"."user_id" = $1 AND "positions"."action" = $2 AND "positions"."status" = $3 GROUP BY ticker.name ORDER BY "positions"."transaction_date" DESC  [["user_id", 2], ["action", 0], ["status", 0]]
  Position Load (2.3ms)  SELECT  "positions".* FROM "positions" INNER JOIN "portfolios" ON "positions"."portfolio_id" = "portfolios"."id" WHERE "portfolios"."user_id" = $1 AND "positions"."action" = $2 AND "positions"."status" = $3 GROUP BY ticker.name ORDER BY "positions"."transaction_date" DESC LIMIT $4  [["user_id", 2], ["action", 0], ["status", 0], ["LIMIT", 11]]
=> #<Position::ActiveRecord_AssociationRelation:0x3ffdefe0a7a4>
我该怎么做

编辑

请参见下面的示例屏幕截图,了解我希望如何组织结果:

我看到你在头寸表上有股票代码,而不是在股票表上。如果是这样的话,你不需要看股票表。也许最好把它放在股票桌上 此外,上面没有列出交易日,因此我假设它在头寸表中

这或多或少就是您所拥有的,我假设组'ticker.name'不适合您,因为您需要按positions tables ticker列进行分组

@positions\u group\u by\u ticker=当前用户.positions.buy.open.group'positions.ticker'.ordertransaction\u日期::desc 使用组将返回数组数组,而不是AR集合

# view.html.erb
@grouped_positions.each do |stock_positions|
  <%= render stock_positions %>
end

在位置表中是否有一列称为ticker?如果不加入,你将如何分组?是的,在问题顶部的模式表中查找positions.ticker是positions中的一列,tickers.name来自哪里?@SebastianPalma。那是错误的。我更新了问题以删除它。它仍然返回一个类似的AR关联对象,这对我没有多大帮助。您使用的是什么RDBMS?那么当前用户.positions.buy.open.选择'distinct on positions.ticker*'?当我尝试这个时,它不起作用。ActiveRecord::StatementInvalid:PG::GroupingError:ERROR:column positions.id必须出现在GROUP BY子句中,或用于聚合函数行1:SELECT positions.*从positions内部加入公文包…啊,我明白了!我已经更新了上面的查询。这个人也有类似的问题