2014-01-17 14 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は注文するべきものを知らない。あなたは(this_weekスコープ内またはタグ方式で)発注を行っている今までどこでこれを変更する必要があります。これに

order('created_at') 

order('recipes.created_at') 

と仮定すると、あなたはレシピのフィールドで注文したいです。テーブル名をハードコーディングしたくない場合は、self.class.table_nameを代わりに使用してください。

+0

Genius!ありがとう、これは私が必要なものです。それは私の懸念の一つに苛立って隠されました! – MikeHolford

+0

@PhilipHallstromこれは文字列ではなくハッシュで行うことができますか? – BKSpurgeon

+1

@BKSpurgeonいいえ、ハッシュバージョンはasc/dec ala 'order(created_at:desc)'のみです。 –

関連する問題