9

ruby on rails フォームから複数選択を保存すると、先頭に空白の要素が追加されているように見えます。どうすれば削除できますか? フィールドは selected_player です。

{"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"}

コントローラ

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
4

7 に答える 7

7

reject!Array クラスの参照

params["schedule"]["selected_players"] = ["", "38", "41"]
params["schedule"]["selected_players"].reject!{|a| a==""} #gives params["selected_players"] = ["38", "41"]
于 2012-10-24T13:18:38.303 に答える
0

「selected_players」とは何ですか? コレクション関連の「collection_singular_ids」のようなものでしょうか。その場合、そのままにしておくことができます。ActiveRecord は次のコードで配列から空白の要素を削除するからです。

ids = Array.wrap(ids).reject { |id| id.blank? }
于 2012-10-24T14:18:24.807 に答える
0

何かのようなもの:

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

動作するはずです

于 2012-10-24T13:17:20.250 に答える
-3

params["selected_players"].compactが一番簡潔だと思います。

ドキュメントはこちら: http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-compact

于 2012-10-24T14:53:56.020 に答える