Mik*_*ord 5 scope ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我已经传递了一个方法'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
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?非常感激.
Phi*_*rom 13
您必须created_at在配方和标签表中都有一个字段.MySQL不知道应该订购哪一个.无论您在哪里进行排序(在this_week范围内或在tag方法中),您都需要更改:
order('created_at')
Run Code Online (Sandbox Code Playgroud)
对此:
order('recipes.created_at')
Run Code Online (Sandbox Code Playgroud)
假设你想按食谱的字段订购.如果您不喜欢硬编码表名,您可以使用self.class.table_name并替换它.