Powiedzmy, że masz tę strukturę:Korzystanie accepts_nested_attributes_for + masowej ochronę przypisania w Rails
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
Zauważ, że użytkownik telewizora nie jest dostępny na celu. Masz więc potrójnie zagnieżdżoną formę, która pozwala na wejście do domu, pokoju i telewizora na jednej stronie.
Oto kontrolera tworzyć metoda:
def create
@house = House.new(params[:house])
if @house.save
# ... standard stuff
else
# ... standard stuff
end
end
Pytanie: Jak w świecie chcesz zapełnić user_id
dla każdego tv (powinno pochodzić z current_user.id)? Jaka jest dobra praktyka?
Oto haczyk 22 Widzę w tym.
- Populate
user_ids
bezpośrednio doparams
hash (są dość głęboko zagnieżdżone)- Zapisz się niepowodzeniem, ponieważ
user_ids
nie są masowo przypisane
- Zapisz się niepowodzeniem, ponieważ
- Populate użytkownik dla każdego telewizora jest po #save zakończone
- Zapisz się nie uda, ponieważ
user_id
musi być obecny - Nawet jeśli pominąć powyższe, telewizory będą bez identyfikatorów chwilę czasu - ssie
- Zapisz się nie uda, ponieważ
każdy przyzwoity sposób to zrobić?
Dzięki za twoje pytanie. Attr_accessible: rooms_attributes pomógł mi rozwiązać problem związany z masą z Rails 2.3'S accepts_nested_attributes_for feature. Wystąpił błąd o treści "OSTRZEŻENIE: nie można przypisać masowo tych chronionych atrybutów: XXX_attributes". – craig