2016-05-06 46 views
0

我遵循Micheal Hartl Ruby on Rails教程。在第12章中,我收到了這個錯誤。未定義的方法`任何?' for nil:NilClass for <%if if users.any? %>

我想顯示以下和追隨者,但我無法。

This is the error I am getting.

以下是代碼:

show.html.erb

<% provide(:title, @title) %> 
<div class="row"> 
    <aside class="col-md-4"> 
    <section class="user_info"> 
     <%= gravatar_for @user %> 
     <h1><%= @user.name %></h1> 
     <span><%= link_to "view my profile", @user %></span> 
     <span><b>Microposts:</b> <%= @user.microposts.count %></span> 
    </section> 
    <section class="stats"> 
     <%= render 'shared/stats' %> 
     <% if @users.any? %> 
     <div class="user_avatars"> 
      <% @users.each do |user| %> 
      <%= link_to gravatar_for(user, size: 30), user %> 
      <% end %> 
     </div> 
     <% end %> 
    </section> 
    </aside> 
    <div class="col-md-8"> 
    <h3><%= @title %></h3> 
    <% if @users.any? %> 
     <ul class="users follow"> 
     <%= render @users %> 
     </ul> 
     <%= will_paginate %> 
    <% end %> 
    </div> 
</div> 

relationship_controller.rb

class RelationshipsController < ApplicationController 
    before_action :logged_in_user 

    def create 
def create 
    @user = User.find(params[:followed_id]) 
    current_user.follow(user) 
    respond_to do |format| 
     format.html { redirect_to @user } 
     format.js 
    end 

    def destroy 
    @user = Relationship.find(params[:id]).followed 
    current_user.unfollow(user) 
    respond_to do |format| 
     format.html { redirect_to @user } 
     format.js 
    end 
    end 
end 

user_controller.rb

class UsersController < ApplicationController 
before_action :logged_in_user, only: [:index, :edit, :update, :destroy, 
             :following, :followers] 
    before_action:correct_user, only: [:edit, :update] 
    before_action:admin_user,  only: :destroy 

    def index 
    @users= User.paginate(page: params[:page]) 
    end 


    def show 
    @user= User.find(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page], :per_page => 5) 

    end 

    def new 
    @user= User.new 
    end 

    def create 
    @user= User.new(user_params) 
     if @user.save 
     @user.send_activation_email 
    flash[:info] = "Please check your email to activate your account." 
     redirect_to root_url 
     else 
     render 'new' 
     end 
    end 

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

    def update 
    @user= User.find(params[:id]) 
     if @user.update_attributes(user_params) 
    flash[:success] = "Profile updated" 
     redirect_to @user 
     else 
     render 'edit' 
     end 
    end 

    def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User deleted" 
     redirect_to users_url 
    end 

    def following 
    @title = "Following" 
    @user = User.find(params[:id]) 
    @users = @user.following.paginate(page: params[:page]) 
    render 'show_follow' 
    end 

    def followers 
    @title = "Followers" 
    @user = User.find(params[:id]) 
    @users = @user.followers.paginate(page: params[:page]) 
    render 'show_follow' 
    end 


    private 

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




     def correct_user 
    @user= User.find(params[:id]) 
    redirect_to(root_url) unless @user== current_user 
     end 


     def admin_user 
     redirect_to(root_url) unless current_user.admin? 
     end 

    end 
+0

UsersController#show中有什麼? –

+0

我編輯了這個問題。 –

+0

@RachitAhuja我已經通過你的問題和以下答案。看起來你是新手,你沒有得到它。你在搞亂文件名。你應該更新你的'show.html.erb'代碼到'show_follow.html.erb'中。遵循@Nirupa給出的答案將解決您的問題。 –

回答

1

我看到你的資料庫,並好像你已經搞砸代碼的show.html.erb模板移除這個部分,根據您遵循什麼(紅寶石這是你需要改變的:

你的show.html.erb中的代碼應該放在show_follow.html.erb

enter image description here

在此之後再按照第12章,並把正確的代碼在show.html.erb。

+0

非常感謝你:) –

2

你的問題是,show動作被實際使用@user代替@users實例變量。

您的統計信息部分將不起作用,因爲它預計它看起來像User的集合,因爲它將與index行動相同。

既然你有它設置你的show.html.erb模板,你必須訪問的行動,而不是@user@users實例變量和代碼將最有可能移動到show_follow.html.erb模板followers的動作。

UPDATE

你需要從

<section class="stats"> 
     <%= render 'shared/stats' %> 
     <% if @users.any? %> 
     <div class="user_avatars"> 
      <% @users.each do |user| %> 
      <%= link_to gravatar_for(user, size: 30), user %> 
      <% end %> 
     </div> 
     <% end %> 
    </section> 
    </aside> 
    <div class="col-md-8"> 
    <h3><%= @title %></h3> 
    <% if @users.any? %> 
     <ul class="users follow"> 
     <%= render @users %> 
     </ul> 
     <%= will_paginate %> 
    <% end %> 
    </div> 
+0

您可以在https://bitbucket.org/rachitahujadev/sample_app查看我的存儲庫,並告訴我您需要更改哪些內容。 我已經創建了show_follow.html.erb。 –

+0

你需要刪除我剛剛提到的節目模板.. –

+0

非常感謝你:) –

相關問題