2012-10-24 4 views
6

Lorsque j'économise plusieurs sélections à partir d'un formulaire ruby ​​on rails, il semble que j'ajoute un élément vide à l'avant. Comment puis-je l'enlever? Le champ est selected_player.Supprimer un élément vide du tableau

{"utf8"=>"✓", 
"authenticity_token"=>"H8W7qPBezubyeU0adnTGZ4oJqYErin1QNz5oK0QV6WY=", 
"schedule"=>{"event"=>"1", 
"result_id"=>"", 
"time"=>"26/10/2012", 
"duration"=>"15", 
"arrival_time"=>"14", 
"location_id"=>"25", 
"selected_players"=>["", "38", "41"], 
"team_id"=>"1", 
"opponent_id"=>"7", 
"home_or_away"=>"Home"}, 
"commit"=>"Save Event"} 

contrôleur

def update 
    @schedule = Schedule.find(params[:id]) 
    @user = User.find(current_user) 
    @players = User.where(:team_id => current_user[:team_id]).all 

    respond_to do |format| 
    if @schedule.update_attributes(params[:schedule]) 
     Notifier.event_added(@user,@schedule).deliver 
     format.html { redirect_to(@schedule, 
           :notice => "#{event_display_c(@schedule.event)} vs #{@schedule.opponent.name} was successfully updated.") } 
     format.json { head :no_content } 
    else 
     format.html { render :action => "edit" } 
     format.json { render :json => @schedule.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Répondre

5

Ref reject! de classe Array

params["schedule"]["selected_players"] = ["", "38", "41"] 
params["schedule"]["selected_players"].reject!{|a| a==""} #gives params["selected_players"] = ["38", "41"] 
+0

Thats me donne 'undefined méthode 'rejeter! ' pour nil: NilClass' –

+0

S'il vous plaît vérifier ma réponse éditée changer 'params [" selected_players "]' params ["schedule"] ["selected_players"] ' – Salil

0

Quelque chose comme:

params["selected_players"].select!{|val| !val.empty?} 

devrait fonctionner

0

Qu'est-ce que "selected_players"? Est-ce quelque chose comme "collection_singular_ids" des associations de collection? Si oui, vous pouvez le laisser tel qu'il est, parce que ActiveRecord supprimera les éléments blancs du tableau avec le code suivant:

ids = Array.wrap(ids).reject { |id| id.blank? } 
1

Cela devrait fonctionner aussi bien.

params["schedule"]["selected_players"].reject!(&:blank?) 
14

Cela fonctionne pour les chaînes vides:

array.delete_if(&:empty?) 

Pour filtrer les chaînes vides et les valeurs nulles utilisation:

array.delete_if(&:blank?) 

Exemple:

>> a = ["A", "B", "", nil] 
=> ["A", "B", "", nil] 
>> a.delete_if(&:blank?) 
=> ["A", "B"] 
Questions connexes