【问题标题】:Undefined method `name' for nil:NilClass for search formnil 的未定义方法“名称”:搜索表单的 NilClass
【发布时间】:2015-08-14 07:07:39
【问题描述】:

我正在创建搜索表单,并且我已经创建了搜索控制器和其他名为用户的控制器。 这是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:我是初学者,不熟悉 rails 和 ruby​​。

【问题讨论】:

  • 请发布堆栈跟踪以找到错误的文件和行
  • 你为什么要切掉所有多汁的部分?

标签: ruby-on-rails ruby search


【解决方案1】:

您在第 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 %>

【讨论】:

  • 现在我收到此错误undefined method 'each' for nil:NilClass
  • 我猜它是固定的:)
【解决方案2】:

您返回的搜索对象是一个活动记录对象。它不是一个对象。您将需要遍历您的 @users 并访问结果的名称。类似的东西

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

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

【讨论】:

  • 现在我得到了这个error undefined method 'each' for nil:NilClass
  • 感谢大家帮助我完成了一些改动。再次感谢大家。
猜你喜欢
  • 2016-01-31
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多