Простой поиск при использовании ActiveResource
Я пытаюсь создать простую функцию поиска и получить wrong number of arguments (2 for 0..1)
ошибка. Я следовал каждому простому руководству по поисковым рейкам, чтобы увидеть, что я могу делать неправильно, и мне не повезло в отладке.
Также отметим (что может быть причиной этой ошибки), я использую ActiveResource для извлечения записей из API для моей модели Job.
Вот что у меня есть:
# 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
2 ответа
ActiveResource не знает как это сделать where("foo = ?", "bar")
потому что это не для запросов SQL. Ваш класс имеет where
метод, но он принимает только 0 или 1 аргумент, а не 2.
Я бы проверил содержимое params[:search], чтобы убедиться, что это строка, которую вы хотите включить. Также сделайте явным, что где принадлежит Job:
Job.where("city LIKE ?", "%#{search}")