Rails 5按belongs_to关联分组

时间:2019-03-01 07:40:19

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

我有一个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')

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:1)

假设您遵循的是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')