[英]Rails 3/4 Rails Scaffold .update method causes index order to change on Heroku
我建立了一个网络应用程序来测试购买咖啡。
我使用导轨生成支架来制作我的物品供应商:
rails generate scaffold vendor expresso_count:integer cuppucino_count:integer
它还有上面未包含的其他一些变量,但它们都是整数类型
用户购买咖啡时,将更新供应商中的变量,例如:cuppucino_count。 它在使用.update的供应商控制器中使用此自定义方法
def purchase_pass
@vendor = Vendor.find(params[:id])
# checks vendor pass
if @vendor.vendor_pass.to_s == vendor_params[:vendor_pass]
flash[:success] = "Thank you for your purchase of 1x #{ params[:type] }."
#updates coffee type
if params[:type] == 'Espresso'
coffee_count = @vendor.expresso_count
coffee_count = coffee_count +1
@vendor.update(expresso_count: coffee_count)
end
redirect_to purchase_thanks_path
else
flash[:error] = "Pass incorrect. Please ensure you enter the correct pass."
render :purchase
end
结束
该链接对此起作用。
<p><%= link_to vendor_purchase_path(id: @vendor.id, type: 'Americano') do %> <span style="font-size: 300%;" class="fa fa-coffee"></span>Americano <% end %></p>
在Heroku上,供应商的index.html视图上,每当使用edit.html视图或.update方法更新供应商时,供应商显示的顺序都会更改。
即:如果有
Vendor 1, Vendor 2, Vendor 3
变成
Vendor 2, Vendor 3, Vendor 1
如果供应商1是更新的
但是,顺序在我的本地安装上不会更改。
任何想法是什么原因造成的?
这是我的git仓库的链接: https : //bitbucket.org/umlungu/mybeans
与这个问题有关的是如何在index
方法中设置@vendors
变量; 那将决定在索引页面中显示的内容。
如果您保留了脚手架上的代码,那么它很可能看起来如下:
def index
@vendors = Vendor.all
end
这将在表上的select * from vendors
查询中运行select * from vendors
。
请注意,查询没有任何排序子句。 从postgres文档中进行select
:
如果指定了ORDER BY子句,则返回的行将以指定的顺序排序。 如果未给出ORDER BY,则以系统认为最快的顺序返回行。 (请参阅下面的ORDER BY子句。)
因此,这解释了为什么显示的顺序在本地和heroku上不同。
为了使结果按特定顺序显示,请指定order子句,如下所示:
def index
@vendors = Vendor.order(:id)
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.