2014-01-17 1 views
5

У меня есть код для отображения моих рецептов в порядке их популярности, как показано ниже. Это сохраняется в моем индексном файле для представления рецепта.неоднозначное имя столбца: ошибка не работает с тегами

<% @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 

Любые мысли? Очень признателен.

ответ

12

Вы должны иметь поле created_at в таблицах рецептов и тегов. MySQL не знает, какой из них он должен заказать. Где когда вы делаете заказ (в На этой неделе объем или в методе тегов), вам необходимо изменить:

order('created_at') 

к этому:

order('recipes.created_at') 

Предполагая, что вы хотите сделать заказ на поле рецепта в , И если вам не нравится hardcoding имя таблицы, вы можете использовать self.class.table_name и заменить его.

+0

Genius! Спасибо, это то, что мне нужно. Это было досадно спрятано в одной из моих проблем! – MikeHolford

+0

@PhilipHallstrom это можно сделать с помощью хэша, а не строки? – BKSpurgeon

+1

@BKSpurgeon No. Хэш-версия только для asc/dec ala 'order (created_at: desc)' –

Смежные вопросы