Say you have this structure:
class House < ActiveRecord::Base
has_many :rooms
accepts_nested_attributes_for :rooms
attr_accessible :rooms_attributes
end
class Room < ActiveRecord::Base
has_one :tv
accepts_nested_attributes_for :tv
attr_accessible :tv_attributes
end
class Tv
belongs_to :user
attr_accessible :manufacturer
validates_presence_of :user
end
Notice that Tv's user is not accessible on purpose. So you have a tripple-nested form that allows you to enter house, rooms, and tvs on one page.
Here's the controller's create method:
def create
@house = House.new(params[:house])
if @house.save
# ... standard stuff
else
# ... standard stuff
end
end
Question: How in the world would you populate user_id
for each tv (it should come from current_user.id)? What's the good practice?
Here's the catch22 I see in this.
- Populate
user_ids
directly intoparams
hash (they're pretty deeply nested)- Save will fail because
user_ids
are not mass-assignable
- Save will fail because
- Populate user for every tv after #save is finished
- Save will fail because
user_id
must be present - Even if we bypass the above, tvs will be without ids for a moment of time - sucks
- Save will fail because
Any decent way to do this?