Forum: Ruby on Rails [Rails 3.2] nested instance not updated.

Posted by Kad Kerforn (kadoudal)
on 2012-11-30 19:02
(Received via mailing list)
I have  a nested model  Place => Geolocation

class Place < ActiveRecord::Base
  has_one :geolocation, :dependent => :destroy
  accepts_nested_attributes_for :geolocation, :reject_if => :all_blank,
:allow_destroy => true
  attr_accessible :geolocation_attributes

class Geolocation < ActiveRecord::Base
  belongs_to :place
----------------------

Creating Place + Geolocation  is ok ,
= simple_form_for  @place, :url => backoffice_places_path, :html => 
{:class
=> 'form-vertical' } do |f|
   ...
   = f.simple_fields_for :geolocation do |g|
         = render "geolocation_fields", :f => g

Editing Place + geolocation doesnt pass ,   the update method  receives 
the
new geolocation attributes from the form, but the geolocation instance 
is
not updated... ( no validation error )

=  simple_form_for @place, :url => backoffice_place_path, :html => 
{:method
=> :put, :class => 'form-vertical' } do |f|
   ...
    = f.simple_fields_for :geolocation_attributes, @place.geolocation 
do
|g|
 = render "geolocation_fields", :f => g

Place controller
  def edit
     @place = Place .find(params[:id])

  def update
    debugger
    if @place.update_attributes(params[:place])
      debugger
      redirect_to backoffice_place_path(@place), notice: 
t(:place_updated)

params
{"id"=>"76", "geolocation_attributes"=>{"street_address"=>"19 Camp 
Road",
"postal_code"=>"Greater London SW19 4UW", "city"=>"London",
"country"=>"United Kingdom"}, "controller"=>"backoffice/places",
"action"=>"update"}

any ide where I am wrong  ?  thanks for any clue
Posted by Kad Kerforn (kadoudal)
on 2012-11-30 19:32
(Received via mailing list)
[SOLVED]  in my functional test I had a bad :put ,

      assert_difference [ 'Place.count', 'Geolocation.count' ], 0 do
        put :update, :id => @place[:id],
        :geolocation_attributes =>  {
            street_address: @street_address,
            postal_code: @postal_code,
            city: @city,
            country: @country }
      end

when I should have added the :place => {  :geolocation_attributes =>  { 
!!

      assert_difference [ 'Place.count', 'Geolocation.count' ], 0 do
        put :update, :id => @place[:id], :place => {
        :geolocation_attributes =>  {
            street_address: @street_address,
            postal_code: @postal_code,
            city: @city,
            country: @country }
          }
      end

updating correctly now

Le vendredi 30 novembre 2012 19:01:51 UTC+1, Erwin a crit :
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.