Простой поиск при использовании 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}")
Другие вопросы по тегам