我的查询如下:
@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}
时,它会返回一个字符串而不是日期时间。
答案 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)}