2016-02-27 67 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我正在使用一个名为[json-server]的假REST API(https://github.com/typicode/json-server)。任务不是使用API​​为自己的数据库创建种子,而是使用GET和POST到内部Web服务器 – mikeymurph77

0

我会检查则params的内容[:搜索],以确保它是您想要在这样的字符串。 还明确指出,在哪里属于工作:

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