Bonjour!
Je souhaite enregistrer via un seul formulaire ( film ) Ã l’aide de
checkoxes plusieurs modèles reliés entre eux.
les fonctions et personnages sont au préalables créés.
un film à plusieurs fonctions qui ont elles mêmes plusieurs personnages
model film:
has_many :film_fonctions, :dependent => :destroy
has_many :fonctions, :through => :film_fonctions
has_many :film_personnages, :dependent => :destroy
has_many :personnages, :through => :film_personnages
model fonction:
has_many :fonction_personnages, :dependent => :destroy
has_many :personnages, :through => :fonction_personnages
dans ma vue views/films/_form ( new et edit ):
<% for fonction in fonction.find(:all, :order =>‘titre ASC’ ) %>
<% end -%>
dans le controller films:
def create
@film = Film.new(params[:film])
@film.fonctions = Fonction.find(params[:fonction_ids]) if
params[:fonction_ids]
@tfilm.personnages = Personnage.find(params[:personnage_ids]) if
params[:personnage_ids]
if @film.save
redirect_to admin_films_url
else
format.html { render :action => "new" }
format.xml { render :xml => @film.errors, :status =>
:unprocessable_entity }
end
end
routes:
map.resources :films, :collection => {:admin=>:get,:live_search =>:get}
do |film|
film.resources :fonctions, :collection => {:admin=>:get} do
|fonction|
fonction.resources :personnages, :collection => {:admin=>:get}
end
end
tout s’enregistre correctement dans la table film_fonctions et
film_personnages mais toujours pas dans fonction_personnages
Donc lorsque j’enregistre les personnages c’est par rapport au film et
non aux fonctions.
Comment puis-je piloter la table fonction_personnages depuis le
controller film ?
Quelle est la solution la plus simple ?
Merci !
Patrice