订购后如何获取记录中的第一行? Ruby On Rails

时间:2014-10-29 01:45:09

标签: ruby-on-rails ruby

我正在使用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)

但它也没有用。我如何才能获得一个注册?

3 个答案:

答案 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属性存储在数据库中,计算。