2016-04-05 18 views
-1

Rails için yeni bir kullanıcıyım ve şimdiden tüm çözümleri stackoverflow üzerinde daha önce denedim. localhost kullanarak bir kullanıcı: 3000/users/1. user_controller Benim kodudur:Bu hatayı alıyorum "undefined method name name: nil: NilClass" bir kullanıcı kimliğine göre erişmeye çalışıyorum

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> 

cevap

2
  1. private üzerinden show harekete geçin. Özel bir yöntem değildir. Bu nedenle, @users değişkeni sıfırdır. Bununla birlikte, @users'u bile bulmanız gerekmiyor, aşağıdaki yanıt bunu gösteriyor.
  2. @users dizisinde name (bir özellik) yöntemini çağırmaya çalışıyorsunuz. Nesne üzerinde aramanız gerekiyor, @user.

Yan not: Bir ActiveRecord :: İlişki (User.all) için Ruby içinde önceden tanımlanmış bir yöntem name da vardır. Ancak, gönderdiğiniz örnekte, değişkeniniz @users sıfırdı, bu yüzden bu kadar uzağa gitmiyordu. senin show eylem özel yöntem olmasaydı Ama, bu deneyimli olurdu:

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

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

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

Çözüm

# 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

Çok teşekkür ederim! – Shivani

+0

Hoşgeldin @kanika. Şerefe. –

+1

@kanika Justin Licata bu güzel cevabın kredisini hak ediyor, çözüm olarak işaretlemeyi unutma ;-) – MrYoshiji

İlgili konular