[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 :
>
> 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 
>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/9B3-GbsASNgJ.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to