thanks Mike - I was trying to setup a spec that tests that my foreign key
constraints would hold - I'll try the method you suggest

On Sun, Jan 11, 2009 at 9:38 PM, Mikel Lindsaar <[email protected]> wrote:

>
> On Sun, Jan 11, 2009 at 9:08 PM, Greg Hauptmann
> <[email protected]> wrote:
> > Why does ActiveRecord allow perception of success when updating an ID,
> > however it doesn't really work(i.e. no change in database)?
>
> That is because :id is a special case and is protected from mass
> assignment.
>
> The reason it "works" or says that it does is because when you submit
> an update form, you might have a params hash that looks like:
>
> params[:account] #=> {:id => 2, :name => "Bob"}
>
> and you will then do:
>
> a = Account.find(params[:account][:id])
> a.update_attributes(params[:account])
>
> Now... in 99% of cases, you want this update_attributes command to
> work, but you definately do NOT want some smartarse out there sending
> in a carefully crafted web request that changes the ID value of the
> account!
>
> So that's why, update_attributes "silently" ignores any attribute that
> is protected from mass assignment.
>
> Actually... it doesn't ignore it. Look in your logs and you will see
> something along the lines of "Can't mass assign protected attribute
> :id" or something.
>
> For what it's worth, doing:
>
> account.update_attribute(:id, 1)
>
> or
>
> account.id = 1
> account.save
>
>
> Both work.
>
> Hope that helps
>
> Mikel
>
> --
> http://lindsaar.net/
> Rails, RSpec and Life blog....
>
> >
>


-- 
Greg
http://blog.gregnet.org/

--~--~---------~--~----~------------~-------~--~----~
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]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to