2015-08-14 53 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

相关问题