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' ) %>
<div>
<%= check_box_tag "film[fonction_ids][]", fonction.id,
@film.fonctions.include?(fonction) %>
<%= link_to_function(fonction.titre) do |page|
page.visual_effect :toggle_blind, "#{fonction.id}"
end
%>
</div>
<div id="<%= fonction.id %>" style="display:none;" >
<div id="perso">
<% for personnage in personnage.find(:all, :order =>'titre ASC' ) %>
<div>
<%= check_box_tag "film[personnage_ids][]", personnage.id,
@film.personnages.include?(personnage) %>
<%= personnage.titre %>
</div>
<% end -%>
</div>
</div>
<% 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
on 2010-10-01 14:21
on 2010-10-02 20:21
Si j'ai bien compris ce que tu souhaites faire, dans ton model il te faut ajouter un accepts_nested_attributes_for et dans ta view utiliser fields_for. Je te laisse chercher des infos sur ça pour l'adapter à ton problème. Attention ton code est à revoir, il y a des choses sales qui trainent. -- http://digiprof.tv
on 2010-10-06 12:29
j'ai trouvé comment enregistrer correctement mes donnéées:
j'ai donc 3 tables film/fonction/personnage
et une table de jointure: joint
le tout avec fields_for et accepts_nested_attributes_for
dans ma vue (views/films/_form):
<% Personnage.find(:all,:order=>"titre").each do |perso| %>
<span>
<%= link_to_function(perso.titre) do |page|
page.visual_effect :toggle_blind, "#{perso.id}"
end
%>
</span>
<div id="<%= perso.id %>" style="display:none;" >
<% Fonction.find(:all,:order=>"titre").each do |fonction| %>
<br />
<% f.fields_for :joints, Joint.new(:personnage_id => perso.id) do
|ff| %>
<%= ff.hidden_field :personnage_id %>
<%= ff.check_box :fonction_id, {}, fonction.id %>
<span><%= fonction.titre %></span>
<% end %>
<br />
<% end %>
<br />
</div>
<% end %>
par contre, je n'arrive pas à l'éditer correctement...
une idée ?
merci
on 2010-10-06 13:11
> <div id="<%= perso.id %>" style="display:none;" > > <% Fonction.find(:all,:order=>"titre").each do |fonction| %> > <br /> > <% f.fields_for :joints, Joint.new(:personnage_id => perso.id) do > |ff| %> > <%= ff.hidden_field :personnage_id %> > <%= ff.check_box :fonction_id, {}, fonction.id %> > <span><%= fonction.titre %></span> je ne sais pas si le probleme vient de la mais: d'ou vient le "f" de <% f.fields_for , ne serait ce pas "fonction" plutot?
on 2010-10-06 13:18
le f vient de:
<% form_for @film, :url=>chiratfilms_url, :html => { :multipart => true}
do |f| %>
puisque tout est controllé depuis le model film
donc là , je suis dans le partial _form pour "new" et "edit"
dans ma table joint j'ai:
film_id
fonction_id
personnage_id
l'idée étant d'enregistrer pour un film, plusieurs fonctions qui elles
même ont plusieurs personnages.
Mais aucune idée au niveau de l'update…
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.