Как вы определяете типы, если пользовательский выбор в запросе рельсов - PullRequest
1 голос
/ 21 июля 2011

Мой запрос выглядит так:

@posts = Post.includes(:last_comment)
    .joins("LEFT OUTER JOIN read_marks ON posts.id = read_marks.post_id AND read_marks.user_id = #{user.id}")
    .where(:postr_id => postr.id)
    .select("posts.*, read_marks.comments_cache as rm_comments_cache, read_marks.timestamp as last_read_at")

Но когда я вызываю @posts.each{|post| post.last_read_at}, возвращается строка, а не дата и время.

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Даже если last_read_at должно быть datetime ActiveRecord не выполняет автоматическую десериализацию значений, не являющихся столбцами.Вам придется разобрать дату самостоятельно.

@posts.each{|post| post.last_read_at = Time.zone.parse(post.last_read_at)}
1 голос
/ 21 июля 2011

Почему бы вам не попробовать модель ReadMark?

@posts = Post.includes(:read_marks)
    .joins("LEFT OUTER JOIN read_marks ON posts.id = read_marks.post_id and read_marks.user_id = #{user.id}")
    .where(:postr_id => postr.id)

@posts.each{|post| post.read_marks.timestamp}

Этот метод более чистый и использует ActiveRecord так, как он был спроектирован.

Если вы действительно хотите использовать свой оригинальный запрос, вы можете разобрать дату вручную.

@posts.each{|post| Date.parse post.last_read_at }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...