I have the following classes:
- Project
- Person
- Person > Developer
- Person > Manager
In the Project
model I have added the following statements:
has_and_belongs_to_many :people
accepts_nested_attributes_for :people
And of course the appropriate statements in the class Person
. How can I add a Developer
to a Project
through the nested_attributes
method? The following does not work:
@p.people_attributes = [{:name => "Epic Beard Man", :type => "Developer"}]
@p.people
=> [#<Person id: nil, name: "Epic Beard Man", type: nil>]
As you can see the type
attributes is set to nil
instead of "Developer"
.
Solution for Rails3: attributes_protected_by_default in now a class-method:
Patches above did not work for me, but this did (Rails3):
Foo.bars.build(:type=>'Baz').class == Baz
For those of us using Mongoid, you will need to make the
_type
field accessible:I encountered a similar problem few days ago. The inheritance column(i.e.
type
) in a STI model is a protected attribute. Do the following to override the default protection in yourPerson
class.Rails 2.3
Rails 3
Refer to the solution suggested by @tokland.
Caveat:
You are overriding the system protected attribute.
Reference:
SO Question on the topic