模糊列名称:错误无法使用标记

时间:2014-01-17 16:55:36

标签: ruby-on-rails scope ambiguous

我有一些代码按照它们的受欢迎程度显示我的食谱,如下所示。它存储在配方视图的索引文件中。

<% @all_recipes.this_week.reorder("likes_count DESC").limit(10).each do |i| %>
  <%=link_to image_tag(i.image(:fixed), alt: "MUC", :class => "browse-recipes"), i %>
<% end %>

正如你所看到的,我已经传递了一个方法'this_week',它完美地定义为范围。

我的问题是,我在同一页面上有一个标签云,当我点击一个标签时,应该刷新页面,但只显示带有相关标签的那些食谱。这样做完全没有应用的this_week方法但是如果方法在那里我得到以下错误:

SQLite3::SQLException: ambiguous column name: created_at: SELECT  "recipes".* FROM     "recipes" JOIN taggings recipes_taggings_81e277c  ON recipes_taggings_81e277c.taggable_id = recipes.id AND recipes_taggings_81e277c.taggable_type = 'Recipe' AND recipes_taggings_81e277c.tag_id = 33 WHERE "recipes"."live" = 't' AND (created_at > '2014-01-13 00:00:00.000000')  ORDER BY likes_count DESC LIMIT 10

有什么想法?非常感谢。

1 个答案:

答案 0 :(得分:13)

您必须在食谱和标签表中都有created_at字段。 MySQL不知道应该订购哪一个。无论您在哪里进行排序(在this_week范围内或在tag方法中),您都需要更改它:

order('created_at')

到此:

order('recipes.created_at')

假设您想按食谱的字段排序。如果您不喜欢对表名进行硬编码,则可以使用self.class.table_name并将其替换为。