属性未添加到对象

时间:2011-07-03 09:46:28

标签: ruby ruby-on-rails-3 object attributes

我正在尝试向模型对象添加属性。直接访问有效但当我打印整个对象或将其编码为JSON时,该属性被省略。有人能告诉我我做错了吗?

这是我的rails控制台输出:

irb(main):010:0> b=ChatMessage.new(:user_id=>4,:room_id=>1,:message=>"Hello World")
=> #<ChatMessage id: nil, room_id: 1, user_id: 4, message: "Hello World", created_at:     nil, updated_at: nil>
irb(main):011:0> b.sender_nickname="bbb"
=> "bbb"
irb(main):012:0> b.sender_nickname
=> "bbb"
irb(main):013:0> b
=> #<ChatMessage id: nil, room_id: 1, user_id: 4, message: "Hello World", created_at: nil, updated_at: nil>

这是我的型号代码:

class ChatMessage < ActiveRecord::Base
  attr_accessor :sender_nickname

  def self.get_last_message_id
    last_message=ChatMessage.all.last
    last_message.nil? ? 0 : last_message.id
  end

  def self.get_all_messages_after(room_id,message_id)
    ChatMessage.where("room_id = ? AND id > ?",room_id,message_id)
  end
end

编辑:

以下是chat_messages表的迁移文件。 我真的不想保存sender_nickname。所以它更像是一个虚拟属性(但仍然通过关联在db中)。我可能需要稍后添加不在db中的其他属性。是否可以在不使用关联的情况下完成?

def self.up
  create_table :chat_messages do |t|
    t.integer :room_id
    t.integer :user_id
    t.string :message

    t.timestamps
  end
end

1 个答案:

答案 0 :(得分:0)

据我所知 to_json 只会获取模型中的属性并序列化(如chat_message.attributes,而不是attr_accessor)。

你合适地得到了发件人,用户模型或类似的东西。

我要做的是使用belongs_to与发件人,用户或其调用的内容建立关系,然后使用此代码将其转换为json:

chat_message.to_json(:include => { :sender => { :only => :nickname } })

它也可以与您的代码一起使用,然后只是:

chat_message.to_json(:include => { :sender_nickname })

此处还有一些文档:http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html

希望有所帮助:)