【问题标题】:Advanced search in Rails App - MS SQL ServerRails 应用程序中的高级搜索 - MS SQL Server
【发布时间】:2016-05-11 07:08:44
【问题描述】:

我在尝试执行 Railscasts #111 高级搜索中概述的搜索时遇到错误。

我现在的代码:

搜索控制器

class SearchesController < ApplicationController
def new
    @search = Search.new
end

def create
    @search = Search.new(search_params)
end

def show
    @search = Search.find(params[:id])
end

private

def search_params
  params.require(:search).permit(:firstname, :surname, :phonenumber, :department, :division, :address, :note)
end
end

show.html.erb

<h1>Search Results</h1>
<%= render @search.votsphonebookresults %>

搜索.rb

class Search < ActiveRecord::Base
def votsphonebookresults
    @votsphonebookresults ||= find_votsphonebookresults
end

private

def find_votsphonebookresults

    votsphonebookresults = votsphonebookresults.where("firstname like ?", "%#{firstname}%") if firstname.present?
    votsphonebookresults = votsphonebookresults.where("surname like ?", "%#{surname}%") if surname.present?
    votsphonebookresults = votsphonebookresults.where("OfficeNumber like ?", "%#{OfficeNumber}%") if phonenumber.present?
    votsphonebookresults = votsphonebookresults.where("Department like ?", "%#{Department}%") if department.present?
    votsphonebookresults = votsphonebookresults.where("Division like ?", "%#{Division}%") if division.present?
    votsphonebookresults = votsphonebookresults.where("Address like ?", "%#{Address}%") if address.present?
    votsphonebookresults = votsphonebookresults.where("Note like ?", "%#{Note}%") if note.present?
    votsphonebookresults
end
end

我在尝试执行搜索时收到“nil:NilClass”错误的“未定义方法 `where'”。搜索表单没问题,但提交会导致 'where' 出现问题

我正在搜索 MS SQL Server 中的数据库。我可以在我的应用程序的其他任何地方很好地显示该数据库中的条目。

【问题讨论】:

    标签: ruby-on-rails sql-server railscasts


    【解决方案1】:

    您似乎收到此错误,因为当您第一次在 @search 上调用 votsphonebookresults 时未设置您检查的任何属性,因此 find_votsphonebookresults 返回 nil,它在 @votsphonebookresults 中被记忆,当您然后在nil 上调用where 你会得到一个UndefinedMethod 错误。 但是,更根本的是,搜索类中代码的问题在于您有一个无限循环,其中find_votsphonebookresults 调用votsphonebookresults,而votsphonebookresults 又将调用fund_votsphonebookresults,因此您将得到堆栈溢出一旦第一个问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2012-02-08
      • 2011-05-22
      • 1970-01-01
      相关资源
      最近更新 更多