有关ActiveRecord#default_scope方法和默认排序的问题

use*_*029 5 ruby-on-rails ruby-on-rails-3

有关使用Rails 2/3的default_scope的问题.在我的Rails 3项目中,我使用了很多default_scope来按created_at desc进行排序.所以首先我写道:

default_scope order("created_at desc")

在我的很多模特中.但问题是created_at几乎存在于我的每个应用程序表中......所以如果我编写一个简单地在两个表上进行连接的查询,我会得到一个SQL错误模糊列created_at ...所以我不得不重写所有default_scopes包括table_name,如:

default_scope order("posts.created_at desc")

有没有更好的方法来处理这个问题,还是唯一的解决方案?

谢谢.

Joh*_*ley 9

在Rails中使用SQL字符串时,应始终指定表名,以避免这些歧义.请注意,您可以这样做:

default_scope order("#{table_name}.created_at desc")
Run Code Online (Sandbox Code Playgroud)

  • 反引号适用于MySQL,但要注意它们不是ANSI-SQL标准的一部分,因此可能会导致其他数据库服务器出现问题. (2认同)