【问题标题】:Rails 5 grouping by belongs_to associationRails 5按belongs_to关联分组
【发布时间】:2019-03-01 07:40:18
【问题描述】:

我有一个sale_selection 模型,它属于purchasesale

在 Postgres 查询中,我尝试按一些参数进行搜索,将销售分组 item_name,然后获取平均价格。

我收到以下错误:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "sale"

控制器

@search = Purchase.where('extract(year from sale_year) >= ?', params[:select_year])
.joins(:region).where('regions.name = ?', params[:select_region])
.joins(sale_selections: :sale).group('sale.item_name').select('sale.item_name, AVG(sale.price) as price')

【问题讨论】:

  • 您能否添加有问题的模型关联?
  • 第三行groupselect查询有错字,写sales而不是sale

标签: ruby-on-rails postgresql ruby-on-rails-5


【解决方案1】:

需要更正查询中提供的表名(sales 而不是sale),如下所示,

@search = Purchase.where('extract(year from sale_year) >= ?', params[:select_year])
.joins(:region).where('regions.name = ?', params[:select_region])
.joins(sale_selections: :sale).group('sales.item_name').select('sales.item_name, AVG(sales.price) as price')

【讨论】:

    【解决方案2】:

    假设您遵循 Rails 最佳实践,表名应该是 sales 而不是 sale

    @search = Purchase.where('extract(year from sale_year) >= ?', params[:select_year])
    .joins(:region).where('regions.name = ?', params[:select_region])
    .joins(sale_selections: :sale).group('sales.item_name').select('sales.item_name, AVG(sales.price) as price')
    

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      相关资源
      最近更新 更多