Ebben az útmutatóban leírom, hogy miképpen lehet olyan új osztályt készíteni hash paraméterekből, amelyhez nem szükséges active record. Amennyiben nem használsz adatmázist az object mentésére, ez a leírás neked való! Legelőször csináljunk egy új contact.rb fájlt az "app/models" könyvtárban.
class Contact include ActiveModel::Serialization attr_accessor :name, :company_name, :email, :phone, :comment def initialize(attributes = {}) @name=attributes[:name] @company_name=attributes[:company_name] @email=attributes[:email] @phone=attributes[:phone] @comment=attributes[:comment] end # persisted fontos, hogy ne kapjunk "undefined method `to_key' for" hibaüzenetet def persisted? false end end
Ezután már új form létrehozására is használhatjuk a modelünket, akárcsak egy ActiveRecord-os model esetében:
@contact=Contact.new
vagy:
@contact=Contact.new(params[:contact])
Ezt az objectet használhatjuk arra, hogy email-ben küldük el az adatokat az értékesítőknek, vagy arra is, hogy egy másik, adatbázist hsználó object-be ágyazzuk json segítségével. Például, ha van egy json_contact nevű text mezőnk a User active_record object-ben, users.rb:
Class User < ActiveRecord::Base before_save :before_save_function def before_save_function self.json_contact=self.json_contact.to_json true end def contact unless self.json_contact.nil? then contact_hash = ActiveSupport::JSON.decode(self.json_contact).symbolize_keys.clone return Contact.new(contact_hash) else return nil end end end
Ezután hozzáadhatjuk a Contact objectet a User.json_contact-hoz úgy, mint:
@user=... # bármi (find, vagy new)
@contact=Contact.new(params[:contact])
@user.json_contact=@contact
@user.save
Ne felejtsd el újraindítani az alkalmazást, ha bármi változás van a modelekben. Mostmár megkaphatjuk az eredeti User.contact-ot, mint egy objectet, és úgy is használható, mint egy Contact model:
contact_name=@user.contact.name
Ennyi az egész!
Az útmutató angol másolata megtalálható: ruby-on-rails-tutorials.blogspot.com/2010/10/create-new-class-in-rails3-with.html