У меня есть приложение, которое позволяет пользователям сохранять события.Я хотел бы видеть, какие события сохраняются больше всего за последнюю неделю.Чтобы сделать это, я создал «трендовую» функцию в моей модели событий, а затем попытался получить доступ к ней в моем представлении.Это возвращает ошибку.
_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
Итак, строки, которыеВозвращаемое этой функцией должно включать только поля title, event_id и save_count.Почему он ищет is_public?У меня складывается впечатление, что он каким-то образом ожидает фактический экземпляр объекта Event.Если это так, то как мне переписать это?
Обновление в ответ на вопросы об is_public: is_public - это определенно столбец в save_events.Я запустил миграцию.Чтобы изолировать это дальше, я удалил «И сохраненные_events.is_public = TRUE» из SQL и все еще получил ту же ошибку.SQL допустим, и я проверил, что он работает в pgAdmin.