如何平均连接表中的列?

时间:2018-01-30 09:53:40

标签: ruby-on-rails ruby

对于来自项目的items_ratings的每个rating_id,请获取

  1. 姓名
  2. 平均值
  3. 我的桌面设置:

    项目:id url name

    评分:id name

    items_rating:id item_id rating_id value

    我开始用以下方法解决它:

    (Rating.first.id..Rating.last.id).each do |rating_id|
       @item.items_ratings ... 
    end
    

    但是现在我似乎陷入了where(rating_id: rating_id)average(:value)不能在这里一起工作。

    输入:

    @item.items_ratings.where(rating_id: 1)

    输出:

    #<ActiveRecord::AssociationRelation
    [#<ItemsRating item_id: 5, rating_id: 1, user_id: 1, value: "3">, #<ItemsRating item_id: 5, rating_id: 1, user_id: 1, value: "3">, 
    #<ItemsRating item_id: 5, rating_id: 1, user_id: 1, value: "3">, #<ItemsRating item_id: 5, rating_id: 1, user_id: 1, value: "4">, #<ItemsRating item_id: 5, rating_id: 1, user_id: 1, value: "5">]>
    

    输入:

    @item.items_ratings.where(rating_id: 1).average(:value)

    输出:

    ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  function avg(character varying) does not exist
    LINE 1: SELECT AVG("items_ratings"."value") FROM "items_ratings" WHE...
                   ^
    HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
    

3 个答案:

答案 0 :(得分:3)

之所以发生这种情况,是因为您的'value'字段具有'string'类型。如果value仅用作整数,则可以将列类型更改为整数或其他数字类型,即数据库的依赖关系。如果你想使用字符串,那么如果这个值在整数范围内,你的代码就像: @item.items_ratings.where(rating_id: 1).average('CAST(value AS INT)')

答案 1 :(得分:0)

值的参数类型为string,将其更改为integer

答案 2 :(得分:0)

使用此代码:

@item.items_ratings.where(rating_id: 1).average('value')