我正在创建搜索表单,我创建了搜索控制器和其他名为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:我是初学者和铁杆和红宝石的新手。
答案 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
是零。