【问题标题】:rails ActiveModel add attribure that is not persistedrails ActiveModel 添加未持久化的属性
【发布时间】:2015-09-02 15:18:25
【问题描述】:

我正在尝试查询模型表:

> messages = Message.find_by_sql("select count(*) as messages_count,
> sender_id, recipient_id, min(is_read) as is_read from messages group
> by sender_id, recipient_id")

DB 表包含字段 sender_id、receiver_id、is_read。 结果,我得到了一个不存在messages_count的哈希数组。

我试过了

class Message < ActiveRecord::Base
  def attributes
    super.merge('messages_count' => self.messages_count)
  end

  after_initialize do
    self.messages_count = nil unless @attributes.key?("messages_count")
  end   

我也尝试像这样覆盖 get hash

  def serializable_hash(options = {})

  end

这没有被触发。

我还能尝试什么?谢谢!

【问题讨论】:

  • 你期望的结果是什么?
  • 我得到了什么 [#, #, #] 但我的想法是获得类似 [#message_count: 3 , is_read: false, sender_id: 409608538, recipient_id: 762146111>]

标签: sql ruby-on-rails activerecord serialization find-by-sql


【解决方案1】:

我找到了解决方案 this thread

messages = ActiveRecord::Base.connection
                 .select_all("select count(*) as messages_count,
                           sender_id, recipient_id, min(is_read) as is_read
                           from messages group by sender_id, recipient_id").to_a

返回:

[{"messages_count"=>3, "sender_id"=>409608538, "recipient_id"=>762146111, "is_read"=>"f"}, {"messages_count"=>1, "sender_id"=>409608538, "recipient_id"=>950961012, "is_read"=>"f"},
 {"messages_count"=>2, "sender_id"=>762146111, "recipient_id"=>409608538, "is_read"=>"t"}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多