2016-08-10 4 views
1

게임을 끝낸 후에 모든 사용자의 리더 보드와 점수를 표시하는 작은 게임이 있습니다. 이렇게하려면 업데이트 동작으로 링크를 처리하여 게임이 끝난 후 사용자 점수를 업데이트 할 수 있도록했지만 링크를 클릭하면 "param이 없거나 값이 비어 있습니다 : 사용자"라는 오류가 발생합니다. 또한 단순히 변수가 업데이트 될 양식이 없기 때문에 이것이 발생하는지 궁금합니다.ActionController :: ParameterMissing in UsersController # update

컨트롤러 :

class UsersController < ApplicationController 
def new 
    @user = User.new 
end 

def create 
    @user = User.new(user_params) 
    if @user.save 
     session[:user_id] = @user.id 
     redirect_to '/play' 
    else 
     render '/' 
    end 
end 

def update 
    @user = User.find(current_user) 
    if @user.update(user_params) 
     redirect_to '/leaderboard' 
    else 
     render '/play' 
    end 
end 

private 
def user_params 
    params.require(:user).permit(:nick_name, :score) 
end 
end 



class ScoresController < ApplicationController 
before_action :require_user, only: [:index] 

def index 
    @user = User.find(current_user)  
    @score = @user.score 
    @score = 0 
end 

def leaderboard 
    @users = User.all 
end 
end 

보기 링크 :

<div class="game-over"><%= link_to 'Game Over', "/update", :style => 'text-decoration:none; color:white;' %></div> 

경로 :

Rails.application.routes.draw do 
    root 'users#new', as: :users 
    post '/' => 'users#create' 

    get '/logout' => 'sessions#destroy' 

    get '/play' => 'scores#index', as: :user 
    get '/update' => 'users#update' 
    get '/leaderboard' => 'scores#leaderboard' 
+1

그것은 update'는'패치/PUT'이 아닌'get' 대응 '한다는 http://guides.rubyonrails.org/routing.html#crud-verbs 말한다 -and-actions – mrvncaragay

+0

patch/put을 넣으면 경로가 [get]과 일치하지 않는다는 오류가 발생합니다. – nums11

답변

0

user 당신이 user_params에 필요하기 때문에 요청 PARAMS에 존재한다. link_to를 변경하여 다음과 같이 검색어 매개 변수를 사용할 수 있습니다.

link_to "Refresh", {controller: 'users', action: 'update', nick_name: "#{user.nick_name}", score: "#{get_score}"}, style: '...' 

또는 URL에 매개 변수를 포함하도록 업데이트 경로를 변경하십시오.

# routes.rb 
get '/update/:nick_name/:score' => 'users#update' 

팁 : 업데이트 동작이 서버의 상태를 변경하므로 양식을 PUT으로 변경하고 양식을 사용해야합니다.

0

요청을하기 위해 매개 변수를 전달하는 데 사용되는 것이 사용자 키 아래에 제대로 중첩되어 있지 않은 것처럼 보입니다. 당신이 CRUD``에 대한 레일 가이드를 읽을 때