Ruby on Rails
Thursday, August 29, 2013
I have been working on updating a rails application to 4.0 and spent some time getting to the bottom of why it wasn't working.
What I found was, if a model has a
The following example demonstrates the problem:
In Rails 3.2.14:
In Rails 3.2.14, the
I can work around this by manually invoking the upward
I don't understand why this happens, or if I am doing something wrong. Would someone with more knowledge of the internals be able to explain this ?
-- What I found was, if a model has a
method_missing
definition then it is called instead of any accessors. This causes any model set-up to fail.The following example demonstrates the problem:
class Item < ActiveRecord::Base attr_accessible :name, :content store :content def method_missing(id, *args) puts "method missing: #{id}" end end
In Rails 3.2.14:
and in Rails 4.0.0:$ rails console Loading development environment (Rails 3.2.14) 2.0.0p247 :001 > x = Item.new(name: 'foo') => #<Item id: nil, name: "foo", content: {}, created_at: nil, updated_at: nil> 2.0.0p247 :002 >
$ rails console Loading development environment (Rails 4.0.0) 2.0.0p247 :001 > x = Item.new(name: 'foo') method missing: name= => #<Item id: nil, name: nil, content: {}, created_at: nil, updated_at: nil> 2.0.0p247 :002 >
In Rails 3.2.14, the
name
attribute is set to foo
as is the intention. In Rails 4.0.0, however, see that method_missing
is called and the attribute is not set.I can work around this by manually invoking the upward
method_missing
chain:def method_missing(id, *args) super if respond_to? id send(id,*args) else puts "method missing: #{id}" end end
I don't understand why this happens, or if I am doing something wrong. Would someone with more knowledge of the internals be able to explain this ?
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/044cf660-1c65-40ca-a2cc-eb142957a2de%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment