2013-02-22 61 views
0

试图找出Rails 3应用程序中的以下this post(本身从Railscast中借用)中的Ajax搜索。目前,当我提交,没有任何反应,如果我进入控制台铬,我看到这个错误:Rails Ajax搜索没有做任何事 - 404错误

GET http://localhost:3000/search?utf8=%E2%9C%93&search=&_=1361491523102 404 (Not Found) 

posts.js线5似乎是有罪的,但只是似乎是jQuery的电话,所以我不确定我做错了什么。

我的相关代码:

posts.js.coffee

jQuery -> 
    # Ajax search on submit 
    $('.search_form').submit(-> 
     $.get(this.action, $(this).serialize(), null, 'script') 
     false 
) 

posts_controller.rb

def show 
    @search = Post.search(params[:search]) 

    respond_to do |format| 
    format.html # show.html.erb 
    format.json { redirect_to @post } 
    end 
end 

def search 
    @search = Post.search(params[:search]) 
    render json: { results: @search } 
end 

post.rb

def self.search(search) 
    if search 
    where('name LIKE ?', "%#{search}%") 
    else 
    scoped 
    end 
end 

show.html.erb

<%= form_tag search_path, method: "get", class: "search_form form-inline", 
style: "display:inline-block;" do %> 
    <%= text_field_tag :search, params[:search], placeholder: "Search:", id: "search_field" %> 
    <%= submit_tag("Search", name: nil, class: "btn search", remote: true) %> 
<% end %> 

# Testing for @search stops it from pulling a "no method '.first' for nil NilClass" error. 
<div id="list"><%= render partial: 'list', locals: { search: @search } if @search%></div> 

list.html.erb

<ul> 
    <% @search.each do |p| %> 
     <li><a href=<%= p.id %> ><%= p.name %> <span class="manual_small">(<%= p.created_at.strftime("%b %d, %Y") %>)</span></a></li> 
    <% end %> 
</ul> 

任何想法是怎么回事错在这里?

编辑 - 添加路由的相关线路文件:

resources :posts 

# ... 

match '/search', to: 'posts#search' 

我已经是 '/搜索' 路线那里。那是对的 - 在这种情况下,问题在其他地方吗?代码的其余部分看起来不错吗?

编辑 - 增加搜索方法PostsController,每达米安的rec。感兴趣的新事物是a)我称之为partial,新搜索动作的方式,然后我试图用Post.all替换Post.rb中的show方法的内容,但它仍然没有什么都显示。虽然没有错误抛出。

+3

你很可能没有处理'/ search'的路由。告诉我们你的路线文件 – jvnill 2013-02-22 00:29:04

+0

谢谢!上面添加了它。文件中还有很多内容,但我只是把与Post有关的任何内容都放在这里。如果你想,我可以把它全部。 – Sasha 2013-02-22 04:32:03

+1

您可以添加“搜索”操作内容吗? – 2013-02-22 06:18:20

回答

1

"No search action! Didn't realize I needed one. What should be in it? When I tried an earlier version of this without AJAX, I had a search action that was basically a replica of show (+ @search etc), with all the same variables, otherwise it wouldn't work, because it rendered the show page. Is that the right idea? It seemed very unDRY"

使用AJAX,没有必要使整个show页面。只需返回所需格式的过滤结果:

def search 
    @search = Post.search(params[:search]) 
    render json: { results: @search } 
end 

如有必要,添加基于格式的退货。

+0

嗯。所以我这样做了,(我所有的新代码现在都在上面),虽然它没有出错,但它什么都不做。怀疑我借用的搜索方法,我用Post.all替换了它,搜索仍然没有做任何事情。我可能使用这种方法错了吗?我不知道self.method(参数)结构是关于什么的。 – Sasha 2013-02-22 17:20:58