2016-10-25 2 views
1

У меня возникли проблемы с переопределением параметров именованного маршрута при редактировании или создании сообщения. Я получаю сообщение об ошибке undefined method playerId for nil:NilClass. Он по-прежнему перенаправляет на :id вместо параметров: playerId только с помощью методов создания и редактирования.Переопределение параметров именованного маршрута Редактирование и создание

Ниже :playerId должно быть 101, но 6 - это :id, не зная, почему он его подбирает.

SELECT `players`.* FROM `players` WHERE `players`.`playerId` = 6 LIMIT 1 [["playerId", "6"]] 

Маршруты

resources :players, param: :playerId 

Контроллер

 def show 
      @player = Player.find_by(playerId: params[:playerId]) 
      @season = PlayerStat.where("playerId = ?", @player.playerId).joins(:matches).where('matches.gameType = ?', 0).where('matches.teamId = ?', @player.teamId).group('year(matches.matchDate) DESC') 
     end 

     def edit 
      end 

      def create 
      @player = Player.new(player_params) 

      respond_to do |format| 
       if @player.save 
       format.html { redirect_to @player, notice: 'PLayer was successfully created.' } 
       format.json { render :show, status: :created, location: @player } 
       else 
       format.html { render :new } 
       format.json { render json: @player.errors, status: :unprocessable_entity } 
       end 
      end 
      end 

      def update 
      @player = Player.find params[:playerId] 
      respond_to do |format| 
       if @player.update(player_params) 
       format.html { redirect_to @player, notice: 'Player was successfully updated.' } 
       format.json { render :show, status: :ok, location: @player } 
       else 
       format.html { render :edit } 
       format.json { render json: @player.errors, status: :unprocessable_entity } 
       end 
      end 
      end 

      private 
      def set_player 
       @player = Player.find_by(playerId: params[:playerId]) 
      end 

      def player_params 
       params.require(:player).permit(:playerId, :first_name, :last_name, :dob, :teamId, :jumper_no, :height, :weight, :image, team_attributes: [:teamId, :name], player_stats_attributes: [:playerId, :gameDate, :kicks, :marks]) 
      end 

ответ

1

не определен метод playerId для ноля: NilClass

Проблема заключается в том params[:layerId] является ноль после успешного create или update, потому что вы не проходя любой playerId для redirect_to. Таким образом, @player - nil, что привело к этой ошибке. Изменение кода ниже должно исправить ошибку.

format.html { redirect_to player_path(@player.playerId), notice: 'PLayer was successfully created.' } 

То же самое для update.

+0

Удивительно, но снова Паван. Восстанавливает Бога. – DollarChills

0

вы можете определить полные маршруты, как это:

get '/player/:playerId' => 'players#show' 
get '/player/:playerId/edit' => 'players#edit' 
Смежные вопросы