未定义的方法`name' for nil:搜索表单的NilClass

时间:2015-08-14 07:07:40

标签: ruby-on-rails ruby search

我正在创建搜索表单,我创建了搜索控制器和其他名为user的控制器。 以下是 search_controller

的代码
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 %>

但是当我搜索时,我收到undefined method 'name' for nil:NilClass错误。以下是 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:我是初学者和铁杆和红宝石的新手。

2 个答案:

答案 0 :(得分:2)

第1行的@user为空,这就是您收到错误的原因 在index操作中,请按以下方式更改代码:

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

如果all您的@users为空

您还必须在 index.html.erb 文件中迭代@users。这可以这样做:

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

答案 1 :(得分:0)

您要返回的搜索对象是活动记录对象。这不是一个对象。您需要遍历@users并访问结果的名称。像

这样的东西
- @users.each do |user|
  =user.name

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