2013-02-22 60 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