Ruby on rails 订购后如何获取记录的第一行?RubyonRails
我正在使用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) 但它也
@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要求的任务。因为这里没有更大的图景,我不能假设在更高的层次上创建范围是否有价值。您建议的方法没有保留更高级别的作用域,只是为一些已经相对简单的内容添加了一行额外的代码;我看不出这有什么附加值。