2016-08-10 8 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

あなたは 'crud'タスクに関するレールガイドを読んだとき、それは' update'は 'PATCH/PUT'ない' GET' http://guides.rubyonrails.org/routing.html#crud-verbsに対応することを言います-and-actions – mrvncaragay

+0

patch/putを実行すると、no route matches [get]というエラーが表示されます。 – nums11

答えて

0

userは、あなたがuser_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

あなたのパラメータを渡してリクエストを行うために使用しているものは、ユーザーキーの下に正しくネストされていないようです。

関連する問題