对多态关联进行排序

问题描述 投票:0回答:0

假设我有以下多态关系

class Metric < ApplicationRecord
    belongs_to :metrizable, polymorphic: true
    belongs_to :company, class_name: 'Company', foreign_key: 'metrizable_id', optional: true
    belongs_to :portfolio, class_name: 'Portfolio', foreign_key: 'metrizable_id', optional: true

end
class Company < ApplicationRecord
    has_many :metrics, as: :metrizable, dependent: :destroy
end
class Portfolio < ApplicationRecord
    has_many :metrics, as: :metrizable, dependent: :destroy
end

现在指标可以用公司或投资组合来衡量。 在两个表(公司、投资组合)中,名称字段都存在于数据库中。

example:

@search = Metric.ransack(params[:q])
@search.sorts = ["company_name asc", "portfolio_name asc"]
@search.result.to_sql

我得到类似的东西

"SELECT \"metrics\".* FROM \"metrics\" LEFT OUTER JOIN \"company\" ON \"company\".\"id\" = \"metrics\".\"metrizable_id\" LEFT OUTER JOIN \"portfolios\" ON \"portfolios\".\"id\" = \"metrics\".\"metrizable_id\" ORDER BY \"company\".\"name\" ASC, \"portfolios\".\"name\" ASC, \"metrics\".\"name\" ASC"

即使我获得了所有记录,它们也不是按实体.名称排序的,我希望它们全部按实体.名称独立排序。

假设我有以下多态关系

class Metric < ApplicationRecord
    belongs_to :metrizable, polymorphic: true
    belongs_to :company, class_name: 'Company', foreign_key: 'metrizable_id', optional: true
    belongs_to :portfolio, class_name: 'Portfolio', foreign_key: 'metrizable_id', optional: true

end
class Company < ApplicationRecord
    has_many :metrics, as: :metrizable, dependent: :destroy
end
class Portfolio < ApplicationRecord
    has_many :metrics, as: :metrizable, dependent: :destroy
end

现在指标可以用公司或投资组合来衡量。 在两个表(公司、投资组合)中,名称字段都存在于数据库中。

example:

@search = Metric.ransack(params[:q])
@search.sorts = ["company_name asc", "portfolio_name asc"]
@search.result.to_sql

我得到类似的东西

"SELECT \"metrics\".* FROM \"metrics\" LEFT OUTER JOIN \"company\" ON \"company\".\"id\" = \"metrics\".\"metrizable_id\" LEFT OUTER JOIN \"portfolios\" ON \"portfolios\".\"id\" = \"metrics\".\"metrizable_id\" ORDER BY \"company\".\"name\" ASC, \"portfolios\".\"name\" ASC, \"metrics\".\"name\" ASC"

即使我获得了所有记录,它们也不是按实体.名称、实体(公司、投资组合)排序的,我希望将其全部按独立于源表的实体.名称排序。

sql ruby-on-rails ruby ransack arel
© www.soinside.com 2019 - 2024. All rights reserved.