如果在rails查询中自定义选择,如何定义类型

时间:2011-07-21 19:47:33

标签: ruby-on-rails ruby-on-rails-3 activerecord

我的查询如下:

@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 个答案:

答案 0 :(得分:1)

为什么不尝试使用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 }

答案 1 :(得分:1)

即使last_read_at应为datetime,ActiveRecord也不会自动反序列化非列值。你必须自己解析日期时间。

@posts.each{|post| post.last_read_at = Time.zone.parse(post.last_read_at)}