为什么此ActiveRecord语句在Server中失败但在Console中失败

我有以下查询在特定控制器中的rails s中失败。 在rails c没有失败。

 Post.includes(:user).find(:all, :limit => 10, :order => 'users.display_name ASC') 

在控制台中,它返回正确的数据。 在服务器中,我收到此错误

 ActiveRecord::StatementInvalid: PGError: ERROR: column posts.users.display_name does not exist LINE 1: ...s_count" AS t0_r7, "posts"."popularity" AS t0_r8, "posts"."u... ^ 

查询很长,我只想包含一些相关的片段

 : SELECT "posts"."id" AS t0_r0, "posts"."post_content" AS t0_r1, ... "posts"."popularity" AS t0_r8, "posts"."users.display_name" AS t0_r9, "posts"."subtopics.name" AS t0_r10, "posts"."categories.category_name" AS t0_r11 ... FROM "posts" LEFT OUTER JOIN "users" ON "users"."id" = "posts"."user_id" ORDER BY users.display_name ASC LIMIT 10 

在控制器中,查询生成3个额外的术语。 查询将它们标记为t0_r9,t0_r10和t0_r11。 似乎AR正在添加这个,因为我在该控制器操作的视图中引用了那些特定的列。 我不明白为什么它会这样做,因为这是使用includes的目的。

所以错误不在我发布的代码中。 我有一个帮助器来确定要排序的列。 它看起来像这样:

 valid_names = Post.column_names valid_names = valid_names.concat(["users.display_name", "subtopics.name", "categories.category_name"]) valid_names.include?(params[:sort]) ? params[:sort] : "popularity" 

我几乎不知道这实际上会将额外的术语连接到Post.column_names 。 我通过使用Post.column_names.clone制作副本来修复此问题,这解决了这个问题。

我觉得犯这个错误很傻,但希望这会帮助那些遇到同样问题的其他人。