рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрднреА рдореЙрдбрд▓ (рд╣реИ_рдСрди рдФрд░ рд╡реЗрдЬ_рдЯреЛ), рд╕реНрд╡реАрдХреГрдд_рдирд┐рд╡реЗрд╢рд┐рдд_рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдШреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрджреНрднреБрдд рд╕реНрдерд┐рддрд┐ рдереА, рд▓реЗрдХрд┐рди рдлрд╝реАрд▓реНрдб_ рдлреЙрд░ рд╣реЗрд▓реНрдкрд░ рдлреЙрд░реНрдо рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреЛрд╕реНрдЯ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП "рдЧрдбрд╝рдмрдбрд╝" рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред рдореИрдВ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреЛрд╕реНрдЯ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд░реЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реЛрдЧреА рд╕рд┐рд╡рд╛рдп рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд░реЗрд▓!
рдкреВрд░реНрд╡ рд╢рд░реНрдд
рддреЛ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбрд▓ рд╣реИрдВ:
class Company < ActiveRecord::Base belongs_to :location has_one :user accepts_nested_attributes_for :user accepts_nested_attrbiutes_for :location end class User < ActiveRecord::Base belongs_to :company end class Location < ActiveRecord::Base has_one :company end
рд╣рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕реНрдерд╛рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрдВрдкрдиреА рдХреЗ рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб:
form_for :company do |f| f.text_field :name f.fields_for :user, f.object.user_or_build do |fu| fu.text_field :name end f.fields_for :location, f.object.location_or_build do |fl| fl.text_field :address end end
рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рдиреЗ рд╕реЗ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреГрд╖реНрда рдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд 3 рдлрд╝реАрд▓реНрдб рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣реИ - рдпрд╣ рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдирд╛рдо рдлрд╝реАрд▓реНрдб рд╣реИ (рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ:
@company = Company.new
)ред
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ @company рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:
@company.build_location
рдпрджрд┐ рдпреЗ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдлрд╝реАрд▓реНрдб_for рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдкреНрд░рдкрддреНрд░ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдРрд╕рд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рд╕рд╛рдл рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!
рдирд┐рд░реНрдгрдп
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕
рд░рддреНрди рдХреА рдорджрдж рд╕реЗ
рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ -
get_or_build ред
Gemfile рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
gem 'get_ot_build'
рд░рддреНрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: рдмрдВрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдлрд╝реАрд▓реНрдб_ рдлреЙрд░ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░реЗрдВ:
form_for :company do |f| f.fields_for :user, :build_association => true do |fu| fu.text_field :name end f.fields_for :user, :build_association => true do |fl| fl.text_field :address end end
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд▓реЛрдХреЗрд╢рди рдПрд╕реЛрд╕рд┐рдПрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХрдВрдЯреНрд░реЛрд▓рд░, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рд╣реЗрд▓реНрдкрд░реНрд╕ (рдЬрд╣рд╛рдБ рдХрд╣реАрдВ рднреА рд╣реИ) рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
рдореИрдВ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛, рдордгрд┐ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХрд╛ рднреА рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!