2010-05-19 4 views
2

J'ai actuellement deux modèles: Campagnes et Vidéos. Les vidéos appartiennent à Campaigns et une campagne contient de nombreuses vidéos. Dans mon formulaire de campagne, je souhaite pouvoir ajouter des vidéos qui n'ont pas de parent et également être en mesure de supprimer des vidéos appartenant à la campagne sélectionnée. Je suis venu en utilisant deux listes de sélection multiples distinctes pour cela. Une liste contient toutes les vidéos orphelines et l'autre contient toutes les vidéos appartenant à la campagne sélectionnée. De cette façon, un utilisateur et sélectionnez simplement les vidéos à ajouter et à supprimer. J'ai eu des problèmes en essayant de créer la logique pour ajouter et supprimer des vidéos de la campagne sélectionnée dans mes méthodes "mise à jour" et "créer". J'imagine que d'une manière ou d'une autre je devrais prendre un tableau de chacune des listes de sélection et exécuter une boucle qui ajoute et une boucle qui supprime les vidéos sélectionnées dans chaque formulaire.Comment ajouter et supprimer plusieurs instances "belongs_to" d'une instance "has_many"?

Je vais poster ce que j'ai si loin de ma forme et mes contrôleurs:

Campagnes Controller - Méthode de mise à jour:

def update 
    if @campaign.update_attributes(params[:campaign]) 
     unless request.xhr? 
     flash[:notice] = "'#{@campaign.title}' was successfully updated." 
     else 
     flash.now[:notice] = "'#{@campaign.title}' was successfully updated." 
     end 
     unless from_dialog? 
     unless params[:continue_editing] =~ /true|on|1/ 
      redirect_to admin_campaigns_url 
     else 
      unless request.xhr? 
      redirect_to :back 
      else 
      render :partial => "/shared/message" 
      end 
     end 
     else 
     render :text => "<script type='text/javascript'>parent.window.location = '\#{admin_campaigns_url}';</script>" 
     end 
    else 
     unless request.xhr? 
     render :action => 'edit' 
     else 
     render :partial => "/shared/admin/error_messages_for", :locals => {:symbol => :campaign, :object => @campaign} 
     end 
    end 
    end 

Formulaire de Campagne partielle:

<%= error_messages_for :campaign -%> 
<% form_for [:admin, @campaign] do |f| -%> 

    <div class='field'> 
    <%= f.label :title -%> 
    <%= f.text_field :title, :class => 'larger' -%> 
    </div> 

    <div class='field'> 
    <%= f.label :description -%> 
    <%= f.text_area :description, :rows => 20, :cols => 140, :class => 'wymeditor' -%> 
    </div> 

    <div class='field'> 
    <%= f.label :date -%> 
    <%= f.date_select :date -%> 
    </div> 

    <div class='field'> 
    <%= f.label :videos_in, "Add Videos" -%> 
    <%= f.collection_select(:title, @orphanedVideos, :id, :title, {}, {:multiple => true}) -%> 
    </div> 

    <div class='field'> 
    <%= f.label :videos_out, "Remove Videos" -%> 
    <%= f.collection_select(:title, @campaignVideos, :id, :title, {}, {:multiple => true}) -%> 
    </div> 

    <div class='field'> 
    <%= f.label :preview -%> 
    <%= render :partial => "/shared/admin/image_picker", :locals => { 
     :f => f, 
     :field => :preview_id, 
     :image => @campaign.preview, 
     :toggle_image_display => false 
    } %> 
    </div> 

    <%= render :partial => "/shared/admin/form_actions", :locals => {:f => f, :continue_editing => false} %> 
<% end -%> 

Je Je ne sais pas si les collection_select sont configurés correctement (bien qu'ils s'affichent correctement sur le formulaire). Tout pointeur serait apprécié.

Merci de votre visite!

+0

Pour c larify, quelles sont vos listes déroulantes