Ruby on rails 订购后如何获取记录的第一行?RubyonRails

Ruby on rails 订购后如何获取记录的第一行?RubyonRails,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用RubyonRails 我对模型进行了查询,但我想得到一个寄存器,该寄存器的平均值最高。这是我的代码: @dish = Dish.where("day = ? and week = ?", params[:day], params[:week]) @dish.order(:average) @sug = @dish.first @sug获取id最低的记录,而不是平均值最高的记录 我也试过这样做: @sug = @dish.order(:average).limit(1) 但它也

我正在使用RubyonRails

我对模型进行了查询,但我想得到一个寄存器,该寄存器的平均值最高。这是我的代码:

@dish = Dish.where("day = ? and week = ?", params[:day], params[:week])

@dish.order(:average)

@sug = @dish.first
@sug获取id最低的记录,而不是平均值最高的记录

我也试过这样做:

@sug = @dish.order(:average).limit(1)

但它也不起作用。我怎样才能得到一个寄存器?

您需要像下面这样链接调用

@dish.order(:average).first

调用
.order
不会更改@dish实例,因此当您调用
@dish.first
时,订单不再存在。

@dish.order
不会订购已找到的菜肴,它会将查询更改为包含order子句

@dish=dish.where(“day=?和week=?”,params[:day],params[:week])。order(:average)
会满足您的需求,您也会这样做

@dish = Dish.where("day = ? and week = ?", params[:day], params[:week])
@dish = @dish.order(:average)

@sug = @dish.first

默认情况下,
ActiveRecord::QueryMethods#order
方法进行排序,因此请尝试显式要求降序,然后取第一个:

Dish.order(average: :desc)
    .where("day = ? and week = ?", params[:day], params[:week])
    .first

这假设您的
平均值
属性存储在数据库中,而不是计算出来的。

成功了!我要做的唯一改变就是调用order(average::desc),因为我正试图得到最高的一个。谢谢我认为说你必须实际更新
@dish
,比如
@dish=@dish.order(:average)
,比说你“必须”链接调用要清楚得多。@meager,我相信在这种特殊情况下,链接方法调用更清楚、简洁地显示了如何完成TC要求的任务。因为这里没有更大的图景,我不能假设在更高的层次上创建范围是否有价值。您建议的方法没有保留更高级别的作用域,只是为一些已经相对简单的内容添加了一行额外的代码;我看不出这有什么附加值。