Атрибут не добавляется к объекту - PullRequest
1 голос
/ 03 июля 2011

Я пытаюсь добавить атрибут к объекту модели.Прямой доступ работает, но когда я печатаю весь объект или кодирую его в 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

edit:

Вот файл миграции для таблицы chat_messages.Я не очень хочу сохранить имя отправителя.Так что это больше похоже на виртуальный атрибут (но все еще находится в базе данных через ассоциацию).И мне может понадобиться добавить другие атрибуты позже, которых нет в БД.Возможно ли это сделать без использования ассоциации?

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 голосов
/ 03 июля 2011

Насколько я знаю, to_json будет принимать только атрибуты в модели и сериализовать (как в chat_message.attributes, а не attr_accessor).

Вы правильно получили отправителя или пользователямодель, или что-нибудь в этом роде.

Что бы я сделал, чтобы установить отношение к отправителю, пользователю или тому, что он вызвал, с помощью own_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

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...