Как сделать ActiveModel, чтобы стать хеш или массив? - PullRequest
3 голосов
/ 27 февраля 2012
 class Post< ActiveRecord::Base                                                                                                                                                                                                            
 end   

post_array = Post.first

Если я хочу добавить некоторые данные в с.

post_array['test'] = nil

это приведет к ошибкам:

ActiveModel::MissingAttributeError: can't write unknown attribute \`ff'
        from ......rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/attribute_methods/write.rb:34:in `write_attribute'

Я думаю, что причина: этот коммит в github: выдает ошибку при использовании write_attribute с несуществующим атрибутом

Как я могу вставить некоторые данные в post_array, например, post_array['test'] = nil?

Может быть, есть какие-то методы, которые могут конвертировать эту ActiveModel в хеш или массив?

1 Ответ

5 голосов
/ 27 февраля 2012

Вы можете сделать это так:

post = Post.first
hash = post.attributes
hash['test'] = 'test'

Однако вы, вероятно, не хотите этого: я полагаю, что вы боретесь здесь с необходимостью сохранять некоторые данные на объекте, а модели - это хранение данных для себя. Если вы хотите, чтобы эти данные были сохранены в вашем хранилище данных, вы должны написать миграцию, включающую этот столбец. Если нет, то вы должны использовать attr_accessor в вашей модели:

class Post < ActiveRecord::Base
  attr_accessor :test

end

post.test = 'test' # Now assigns 'test' to post correctly, and you can read it out the same way.

Обычно, если вы не конвертируете данные модели в другой формат (например, JSON или plist или что-то в этом роде), изменение их в хеш обычно просто усложнит вашу жизнь.

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