2015-08-14 50 views
0

我正在創建搜索表單,並且創建了名爲用戶的搜索控制器和其他控制器。 這裏是search_controller未定義的方法名稱爲nil:NilClass用於搜索表單

def search 
    if params[:q] 
    @users = User.q(params[:q]).order("created_at DESC").paginate(page: params[:page]) 
    else 
    @users = User.all.order('created_at DESC').paginate(page: params[:page]) 
    end 
end 

下面的代碼是搜索表單

<%= form_tag search_path, :method => 'get' do %> 
    <%= text_field_tag :q, params[:q] %> 
    <%= submit_tag "Search", :name => nil %> 
<% end %> 

但是,當我搜索我得到​​錯誤。這裏是users_controller代碼

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:index, :edit, :destroy] 

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

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

    def new 
    @user = User.new 
    end 

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

    def create 
    @user = User.new(user_params) 
    if @user.save 
     log_in @user 
     flash[:success] = "Welcome to the Arch" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

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

    private 

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

    def logged_in_user 
     unless logged_in? 
    store_location 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 

end 
end 

誰能告訴我在哪裏,我在做錯誤? PS:我是初學者,也是新手入門。

+0

請發佈stacktrace爲了找到文件和錯誤行 –

+0

http://i.imgur.com/vzC4FrO.png – rootx

+0

爲什麼你切斷所有的多汁? – Borsunho

回答

2

您的@user在第1行是空的,這就是您收到錯誤的原因。
在你index動作,請更改代碼如下:

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

沒有all@users是空

您也將通過@usersindex.html.erb文件進行迭代。可以這樣做:

<% @users.each do |user| %> 
    Your code 
<% end %> 
+0

現在我得到這個錯誤'每個'的'未定義的方法'爲零:NilClass' – rootx

+0

我想它是固定的:) – nik

0

您正在返回的搜索對象是一個活動記錄對象。它不是一個對象。您需要循環訪問@users並訪問結果的名稱。類似於

- @users.each do |user| 
    =user.name 

P.S @user未在您的搜索控制器中定義。所以@user是零。

+0

現在我得到這個'錯誤未定義的方法'每個'爲零:NilClass' – rootx

+0

你能顯示你的搜索索引行動? –

+0

非常感謝所有幫助我的人員進行了更多更改。再次感謝你們所有人。 – rootx

相關問題