私はユーザーがイベントを保存できるアプリケーションを持っています。私は過去1週間にどのイベントが最も保存されているのかを知ることができるようにしたいと考えています。これを行うために、私はイベントモデルで「トレンド」機能を作成し、それを私の視点でアクセスしようとしました。それはエラーを返します。モデルから集計データを返すにはどうすればよいですか?
_trending.html.erb:
missing attribute: is_public
Extracted source (around line #3):
1:
2: <%
3: events = Event.trending(:timespan => 1.week, :limit => 25)
4: %>
これは私のイベントモデルにおけるトレンド機能です。私は生のSQL(postgres db)でそれをコード化することを決めました。そうすれば、ActiveRecordがどのように私のクエリを構築しているのか混乱することはありません。
event.rb:
def self.trending(options={})
limit = options[:limit]
span = options[:timespan]
earliest_save = (Time.now - span)
event_sql = %(SELECT events.title, saved_events.event_id, COUNT(user_id) as save_count, MAX(saved_events.created_at) as created
FROM saved_events, events
WHERE events.id = saved_events.event_id AND saved_events.is_public = TRUE AND saved_events.created_at >= '#{earliest_save}'
GROUP BY saved_events.event_id, events.title
ORDER BY save_count DESC, created DESC
LIMIT #{limit})
find_by_sql("#{event_sql}")
end
だから、この関数によって返されるべき行がフィールドだけのタイトル、EVENT_ID、およびsave_countを含める必要があります。なぜis_publicを探しているのですか?私は何とかEventオブジェクトの実際のインスタンスが期待されるという印象を受けます。それが事実ならば、私はこれをどのように書き直すのですか? is_publicについての質問に応答した
更新: is_publicは間違いなくsaved_eventsの列です。私は移行を実行しました。これをさらに分離するために、SQLからAND saved_events.is_public = TRUEを削除しても、同じエラーが発生しました。 SQLが有効で、pgAdminで動作することを確認しました。
地域is_publicは列ですか。 – nodrog