我有一些代码按照它们的受欢迎程度显示我的食谱,如下所示。它存储在配方视图的索引文件中。
<% @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
有什么想法?非常感谢。
答案 0 :(得分:13)
您必须在食谱和标签表中都有created_at
字段。 MySQL不知道应该订购哪一个。无论您在哪里进行排序(在this_week范围内或在tag方法中),您都需要更改它:
order('created_at')
到此:
order('recipes.created_at')
假设您想按食谱的字段排序。如果您不喜欢对表名进行硬编码,则可以使用self.class.table_name
并将其替换为。