我有一個允許用戶保存事件的應用程序。我希望能夠看到哪些活動在過去一週內保存得最多。爲此,我在Event模型中創建了一個「趨勢」功能,然後嘗試在我的視圖中訪問該功能。這會返回一個錯誤。如何從我的模型中返回聚合數據?
_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數據庫)中編寫代碼,這樣就不會對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
所以應該由這個函數返回的行應該只包含的字段名稱,事項標識,並save_count。爲什麼要尋找is_public?我覺得它不知何故需要一個Event對象的實際實例。如果是這樣的話,我該如何重寫呢?
更新回覆關於is_public的問題: is_public絕對是saved_events中的一列。我確實運行了遷移。爲了進一步隔離,我從SQL中刪除了'AND saved_events.is_public = TRUE',並且仍然得到相同的錯誤。 SQL是有效的,我檢查它是否在pgAdmin中有效。
您確定is_public的區域是列嗎? – nodrog 2012-02-13 23:03:14