неопределенный метод `где 'для nil: NilClass при попытке выполнить расширенный поиск в ruby - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь настроить расширенный поиск в разделе контрактов моего приложения управления арендодателем.

До сих пор я следовал следующему руководству, но все еще не смог ничего найти.

Форма поиска отображается правильно, но как только я что-то ищу, появляется ошибка, указанная в заголовке.

app / models / search.rb: 11: in search_contracts' app/views/searches/show.html.haml:3:in _app_views_searches_show_html_haml__746758187_75961032 '

search.rb

Класс поиска

def search_contracts

@contracts = Contract.all

contracts = contracts.where(["first_name LIKE ?", first_name]) if first_name.present?
contracts = contracts.where(["last_name LIKE ?", last_name]) if last_name.present?
contracts = contracts.where(["balance >= ?", min_balance]) if min_balance.present?
contracts = contracts.where(["balance >= ?", max_balance]) if max_balance.present?
contracts = contracts.where(["unpaid_rent LIKE ?", unpaid_rent]) if unpaid_rent.present?

return contracts
end
end

search_controller

class SearchesController < ApplicationController

def new
@search = Search.new
end

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

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


private

def search_params
params.require(:search).permit(:first_name, :last_name, :min_balance, 
:max_balance, :unpaid_rent)
end

end

1 Ответ

0 голосов
/ 12 февраля 2019

Вы создаете экземпляр @contracts, но не contracts:

class Search < ActiveRecord::Base

  def search_contracts
    @contracts = Contract.all

    contracts = contracts.where(["first_name LIKE ?", first_name]) if first_name.present?
    contracts = contracts.where(["last_name LIKE ?", last_name]) if last_name.present?
    contracts = contracts.where(["balance >= ?", min_balance]) if min_balance.present?
    contracts = contracts.where(["balance >= ?", max_balance]) if max_balance.present?
    contracts = contracts.where(["unpaid_rent LIKE ?", unpaid_rent]) if unpaid_rent.present?

    return contracts
  end
end

Таким образом, contracts.where выдаст ошибку undefined method, поскольку contracts равно нулю.

ТакжеКажется немного странным, что Search наследуется от ActiveRecord::Base на основе кода, который вы опубликовали.Но, может быть, происходит больше, чем кажется на первый взгляд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...