Supposons que vous avez cette structure:aide accepts_nested_attributes_for + protection d'affectation de masse dans 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
Notez que l'utilisateur de télévision ne sont pas accessibles sur le but. Donc, vous avez un formulaire imbriqué qui vous permet d'entrer dans la maison, les chambres et les téléviseurs sur une seule page.
est ici de créer du contrôleur de la méthode:
def create
@house = House.new(params[:house])
if @house.save
# ... standard stuff
else
# ... standard stuff
end
end
Question: Comment dans le monde vous remplir user_id
pour chaque télévision (il devrait provenir current_user.id)? Quelle est la bonne pratique?
Voici le catch22 que je vois dans ceci.
- Populate
user_ids
directement dansparams
hachage (ils sont assez profondément imbriquées)- Enregistrer échouera car
user_ids
ne sont pas en masse assignable
- Enregistrer échouera car
- utilisateur pour chaque Populate télévision après #save est terminé
- L'enregistrement échouera car
user_id
doit être présent - Même si nous contournons ce qui précède, TVS sans ids pour un moment de temps - suce
- L'enregistrement échouera car
De toute façon décente de le faire?
Merci pour votre question. Le 'attr_accessible: rooms_attributes' m'a aidé à résoudre un problème de masse avec Rails 2.3'S accepts_nested_attributes_for feature. Je recevais une erreur qui indiquait 'AVERTISSEMENT: impossible d'affecter en masse ces attributs protégés: XXX_attributes'. – craig