2016-02-27 3 views
0

Я пытаюсь создать простую функцию поиска и получить ошибку wrong number of arguments (2 for 0..1). Я следил за каждым простым руководством по поисковым направляющим, чтобы понять, что я могу сделать неправильно, и не имел отладки удачи.Простой поиск при использовании ActiveResource

Также обратите внимание (что может быть причиной этой ошибки), я использую ActiveResource, чтобы извлекать записи из API для моей модели работы.

Это то, что у меня есть:

# jobs_controller.rb 
def index 
    if params[:search] 
    #ActiveResource does not have an .order which led me to use the code below. 
    @jobs = Job.search(params[:search]).sort_by(&:posted).reverse 
    else 
    @jobs = Job.find(:all).sort_by(&:posted).reverse 
    end 
end 

# job.rb 
def self.search(search) 
    where("city LIKE ?", "%#{search}") 
end 


# views/jobs/index.html.erb 
<%= form_tag(jobs_path, :method => "get", id: "search-form") do %> 
    <%= search_field_tag :search, params[:search], placeholder: "Search Jobs" %> 
    <%= submit_tag "Search", name: nil %> 
<% end %> 

<% if @jobs.present? %> 
    <% @jobs.each do |job| %> 
    <div> 
     <%= link_to job.title, job_path(job) %> 
    </div> 
    <% end %> 
<% else %> 
    There are no posts containing the term(s) <%= params[:search] %>. 
<% end %> 

Трассировка Ошибка:

Processing by JobsController#index as HTML 
    Parameters: {"utf8"=>"✓", "search"=>"Fort Worth"} 
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms) 

ArgumentError (wrong number of arguments (2 for 0..1)): 
    app/models/job.rb:16:in `search' 
    app/controllers/jobs_controller.rb:4:in `index' 

wrong number of arguments (2 for 0..1) 

Extracted source (around line #16): 
15 def self.search(search) 
16  where("city LIKE ?", "%#{search}") 
17 end 
18 end 
+0

Можете ли вы добавить стек ошибок также? Это поможет мне выяснить, из какой строки идет ошибка. –

+0

@ArupRakshit Этого достаточно? – mikeymurph77

+0

Да, достаточно знать, откуда он идет. –

ответ

0

ActiveResource не знает, как это сделать where("foo = ?", "bar"), потому что это не для запросов SQL. Ваш класс имеет метод where, но он принимает только 0 или 1 аргументы, а не 2.

+0

Хмм, это был мой страх. Итак, для ActiveResource нет возможности легко выполнять поиск? Возможно, мне придется создать свой собственный метод 'where'? – mikeymurph77

+0

@ mikeymurph77 Могу ли я узнать, почему не использовать ActiveRecord? –

+0

@ArupRakshit Я использую поддельный API REST под названием [json-server] (https://github.com/typicode/json-server). Задача состоит не в том, чтобы использовать API для создания собственной базы данных, а для GET и POST для внутреннего веб-сервера. – mikeymurph77

0

Я бы проверить содержание Params [: поиск], чтобы убедиться, что это строка, которую вы хотите включить. Также укажите, где и где находится:

Job.where("city LIKE ?", "%#{search}")