Habtm

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’ ) %>

<%= 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 %>
<% for personnage in personnage.find(:all, :order =>'titre ASC' ) %>
<%= check_box_tag "film[personnage_ids][]", personnage.id, @film.personnages.include?(personnage) %> <%= personnage.titre %>
<% end -%>

<% 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

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

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| %>

<%= link_to_function(perso.titre) do |page| page.visual_effect :toggle_blind, "#{perso.id}" end %>
<% Fonction.find(:all,:order=>"titre").each do |fonction| %>
<% f.fields_for :joints, Joint.new(:personnage_id => perso.id) do |ff| %> <%= ff.hidden_field :personnage_id %> <%= ff.check_box :fonction_id, {}, fonction.id %> <%= fonction.titre %>
<% end %>
<br />

<% end %>

<% end %>

par contre, je n’arrive pas à l’éditer correctement…

une idée ?

merci

<% Fonction.find(:all,:order=>"titre").each do |fonction| %>
<% f.fields_for :joints, Joint.new(:personnage_id => perso.id) do |ff| %> <%= ff.hidden_field :personnage_id %> <%= ff.check_box :fonction_id, {}, fonction.id %> <%= fonction.titre %>

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?

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…

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs