Преглеждах някакъв код на Rails и забелязах, че един от класовете в моделите съдържа следния ред: serialize :some_property. Исках да направя скеле нов клас, който ще съдържа сериализирано свойство, но не знам как да го направя точно. Какъв тип трябва да декларирам за сериализираното свойство, т.е. ruby скрипт/генериране на скеле NewClass serialized_property:(КАКВО ТРЯБВА ДА ИДВА ТУК)? Благодаря за всяка помощ!
Ruby on Rails Scaffold Serialize
Отговори (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
във вашия модел.