我正在使用Ruby on Rails。
我对模型进行了查询,但我希望得到一个具有平均属性值最高的寄存器。这是我的代码:
@dish = Dish.where("day = ? and week = ?", params[:day], params[:week])
@dish.order(:average)
@sug = @dish.first
@sug 获取ID最低的记录,而不是平均值最高的记录。
我也是这样试过的:
@sug = @dish.order(:average).limit(1)
但它也没有用。我如何才能获得一个注册?
答案 0 :(得分:1)
您需要按照以下方式对调用进行链接。
@dish.order(:average).first
对.order
的调用不会更改@dish实例,因此当您致电@dish.first
时,订单不再存在。
答案 1 :(得分:1)
@dish.order
没有订购已找到的菜肴,它会更改查询以包含订单条款。
@dish = Dish.where("day = ? and week = ?", params[:day], params[:week]).order(:average)
会做你想做的事情,
@dish = Dish.where("day = ? and week = ?", params[:day], params[:week])
@dish = @dish.order(:average)
@sug = @dish.first
答案 2 :(得分:0)
默认情况下ActiveRecord::QueryMethods#order
方法在ascending order中排序,因此请尝试明确要求降序顺序,然后选择第一个:
Dish.order(average: :desc)
.where("day = ? and week = ?", params[:day], params[:week])
.first
这假设您的average
属性存储在数据库中,不计算。