Ruby on Rails Scaffold Serialize

Преглеждах някакъв код на Rails и забелязах, че един от класовете в моделите съдържа следния ред: serialize :some_property. Исках да направя скеле нов клас, който ще съдържа сериализирано свойство, но не знам как да го направя точно. Какъв тип трябва да декларирам за сериализираното свойство, т.е. ruby ​​скрипт/генериране на скеле NewClass serialized_property:(КАКВО ТРЯБВА ДА ИДВА ТУК)? Благодаря за всяка помощ!


person hassaanm    schedule 10.03.2011    source източник


Отговори (1)


Методът на клас serialize на модел, който наследява от ActiveRecord::Base, ще вземе тази колона/атрибут и ще го превърне в YAML при запазване и ще направи обратното при зареждане. Той е чудесен за запазване на основен масив или хеш обект във вашия модел.

Rails изисква само да използвате колона тип text във вашата база данни/миграция за сериализираното поле. Така че при вашата миграция просто се уверете, че имате следното за вашето сериализирано поле (в този случай settings):

create_table :accounts do |t|
  t.text :settings
end

Тогава във вашия модел трябва да е толкова просто, колкото добавянето на повикването към serialize:

class Account < ActiveRecord::Base
  serialize :settings
end

След това, когато извикате Account.new(:settings => { :big_head_mode => true, :awesome => true }).save Rails автоматично ще сериализира settings хеша в YAML и ще го запази във вашата база данни.

И само за да бъде ясно, скелето няма нищо общо с въпроса. След като генерирате скелето, пак ще трябва да добавите извикването към serialize във вашия модел.

person coreyward    schedule 10.03.2011
comment
@coreyward работи ли и за масив от хешове? например [{ключ: стойност}, {ключ: стойност}, {ключ: стойност}] - person Ivan; 04.09.2011
comment
@Ivan: Винаги можете просто да го опитате, но да, всичко, което ще се превежда чисто към и от Yaml, трябва да се сериализира добре. - person coreyward; 04.09.2011