2016-11-09 7 views
1

ユーザーのランキング数に応じてユーザーのランキングを設定しようとしていました。Railsに同様のカウンターをゼロから設定する

が、私はそれがuser.like.countのためになりたいとき、これはcurrent_user.like.countのためではなく、何らかの理由で仕事を得ることができた私の[すべての人のためにそのないものと同じように]アプリケーションがクラッシュし、私に次のエラーメッセージが表示されます。 "未定義のメソッド` nilのための `likes ':NilClass"このために私の関連するコードと私のgithubをすべて入れました。どんな助けも素晴らしいだろう。

のGithub URL:https://github.com/OmarZV/TY2

_rankings.html.erb

<% if current_user.likes.count >3 %> 
A Ranking 
<% elsif %> 
<% current_user.likes.count == 2%> 
B Ranking 
<% else %> 
C Ranking 
<% end %> 

users_controller.rb

class UsersController < ApplicationController 
    before_action :authenticate_user! 

    def index 
    @users = User.all 
    end 

    def show 
    @users = User.find(params[:id]) 
    end 
end 

routes.rbを

答えにコメントを移動
Rails.application.routes.draw do 
    devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 
    resources :users, :controllers => "users_controller.rb" 
    resources :users do 
    resource :ranking, module: :users 
    end 
    resources :posts do 
    resource :like, module: :posts 
    end 
    root to: "posts#index" 
end 

Index.html.erb

<h1 class="page-header">Platform Users</h1> 
<% @users.each do |user| %> 
<strong><%= user.username %></strong> 
<div class="round-image-50"><%= image_tag(user.avatar.url(:thumb)) %></div> 
div id="user_<%= @user_id%>_rankings"> 
<%= render partial: "rankings", locals: {user: @user} %> 
</div> 
<% end %> 
+0

user.like.countは、ユーザーが何にも設定されていないためエラーです。 User.first.like.countは、最初のユーザーの好き嫌いの数を示します。誰にとっても同じではないということについてどういう意味なのかは分かりません。 current_userは、deviseを使用しているときに現在ログインしているユーザーになります。また、あなたのshowアクションインスタンス変数は、あなたがパラメに基づいて1人のユーザしか見つけられないので、おそらく単数であるべきです。 – user3366016

+0

ありがとうございました。私が意味するのは、 "Current_user"は現在のユーザーのランキングを表示し、ループがあるため他のすべてのユーザーにそれを適用することだけでした。私はちょうど質問に入れたindex.html.erbファイルにあります。だから私が探しているのは、各ユーザーのランキングをどのように表示できるかです。 – Omar

+0

IDはループスルーし、おそらく部分的に使用されません。あなたは 'locals:{user:user}'に渡して、コントローラからのインスタンス変数ではなく、ループから変数を使うことができます。ループの代わりに、この '<%= render partial:" product "、collection:@products%>'のようなコレクションを使うように変更することもできます。 http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials – user3366016

答えて

0

IDはおそらくループスルーし、おそらく部分的に使用されません。しかし、あなたはちょうどlocals: {user: user}に、コントローラのインスタンス変数ではなく、ループから変数を渡すことができます。それについての文書をもう少し詳しくチェックしてください。http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

関連する問題