我是Ruby on Rails的新手,我正在我的Ruby on Rails应用程序中构建一个搜索功能。详情如下:
- 我的应用程序中有一个员工模型、视图和控制器。
- 我打算使用搜索功能来搜索员工的姓名。
- 详情如下:
员工视图
</div></div>
<div class="col-sm-9">
<div class="form-group">
<%= form_with url: employees_path, class: "form-control rounded-0", method: :get do |form| %>
<label for="exampleInputEmail1">Search Employee</label>
<%= text_field_tag(:employeesearchfield) %>
<%= form.submit "Search" %>
<%end%>
</div>
字符串
路线
Rails.application.routes.draw do
resources :operations
get 'operations/:preason', to: 'operations#index'
get 'pages/Administratorhome'
get 'pages/userhome'
devise_for :users
resources :employees do
collection do
delete 'delete_multiple'
end
collection do
post 'import'
end
collection do
get 'export'
end
end
put "employees/:id", to: 'employees#show'
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
root to: "pages#Administratorhome"
# Below route is required for logout functionality.
devise_scope :user do
get 'users/sign_out' => "devise/sessions#destroy"
end
# Defines the root path route ("/")
# root "articles#index"
end
型
员工控制人
def index
@employees = Employee.search_employee(params[:employeesearchfield])
end
型
员工模型
def self.search_employee(employeename)
searchvar = employeename
if searchvar.nil?
employeelist = Employee.all
else
employeelist = Employee.find_by(name: "searchvar")
end
return employeelist
end
型
尝试使用“搜索”表单搜索员工时,出现NoMethod错误。
Error:
我无法理解为什么@employee示例变量为null。
我尝试了byebug gem并试图找到数据流。
我发现搜索表单中的参数“params[:employeesearchfield]”没有流入这个方法。
1条答案
按热度按时间qcbq4gxm1#
当你在
@employees.each
行得到一个undefined method 'each' for nil
时,这意味着@employees
变量返回nil
。发生这种情况是因为你模型中的这条线
字符串
因为
find_by
只返回第一个找到的记录,而nil
在没有找到时返回。此外,您的查询是硬编码的,总是搜索字符串"searchvar"
,而不是变量searchvar
。要解决问题,请将方法更改为:
型
请注意,您可以通过在模型中定义这样的范围来进一步简化代码:
型
在你的控制器中使用scope:
型