モデルオブジェクトに属性を追加しようとしています。直接アクセスは機能しますが、オブジェクト全体を印刷したり、JSONにエンコードしたりすると、その属性は除外されます。誰かが私が間違っていることを教えてもらえますか?ここで属性がオブジェクトに追加されていません
は私のレールのコンソール出力である:ここで
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
'ChatMessage'モデルは最初に属性としてsender_nicknameを持っていますか?それ以外の場合、 'sender_nickname'属性を保存することはできません。 – user482594
あなたのdbスキーマを教えてください。 –
私はそれを保存しようとしていません。 sender_nicknameは私のデータベースには必要ない仮想属性のようなものです。私はJSONでレンダリングしたいだけです。 – Max