2016-04-05 5 views
-1

私はレールの初心者です。以前はstackoverflowで利用可能なすべてのソリューションを試しました。アクセスしようとしています。 localhost:3000/users/1を使用するIDによるユーザー。 user_controllerのための私のコードは次のとおりです。私はこのエラーが発生しました。 "id:NilClass"という未定義のメソッド名です。

class UsersController < ApplicationController 
     def new 
     @user=User.new 
     end 
     def index 
     @users = User.all 
     end 
     def create 
     @user = User.new(user_params) 
     if @user.save 
     redirect_to @user 
     else 
     @title = "Sign up" 
     render 'new' 
     end 
    end 
    private 
    def user_params 
     params.require(:user).permit(:password, :password_confirmation,:email) 
    end 
    def show 
     @user = @users.find(params[:id]) 
     @users=User.all 
    end 
    end 

And my show.html.erb contains : 
    <% provide(:title, @users.name) %> 
    <div class="row"> 
    <aside class="span4"> 
    <section> 
    <h1> 
    <%= gravatar_for @user %> 
    <%= @users.name %> 
    </h1> 
    </section> 
    </aside> 
    </div> 

答えて

2
  1. privateのうち、showアクションを実行します。私的な方法ではありません。そのため、変数@usersはゼロです。しかし、あなたは@usersを見つける必要はありません、以下の答えはそれを示しています。
  2. name(属性)メソッドを配列の@usersで呼び出そうとしています。あなたはオブジェクトの@userでそれを呼び出す必要があります。

サイドノート:事前定義された方法、nameはActiveRecordのためのレールでもある::関係(User.all)。しかし、あなたが掲示した例では、あなたの変数@usersは無かったので、これはこれほど遠くには達していませんでした。 しかしあなたshowアクションはプライベートメソッドではなかった場合、あなたはこれを経験したであろう:

$ User.all.name # or @users.name 
# => 'User' 

$ Post.all.name 
# => 'Post' 

$ User.first.name # or @user.name 
# => 'John' 

ソリューション

# show.html.erb 
<%= @user.name %> 

# users_controller 
class UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 

    def new 
    @user = User.new 
    end 

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

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to @user 
    else 
     @title = "Sign up" 
     render 'new' 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:password, :password_confirmation, :email) 
    end 
end 
+0

はありがとうございました! – Shivani

+0

あなたは大歓迎です。乾杯。 –

+1

@kanika Justin Licataはこの美しい答えの功績に値しますが、それを解決策としてマークすることを忘れないでください;-) – MrYoshiji

関連する問題