试图在 Rails 3 应用程序中找出 Ajax 搜索,遵循这篇文章,它本身是从 Railscast 借来的。目前,当我提交时,什么都没有发生,如果我进入 Chrome 控制台,我会看到这个错误:
GET http://localhost:3000/search?utf8=%E2%9C%93&search=&_=1361491523102 404 (Not Found)
posts.js 第 5 行似乎是有罪的,但这似乎是 jQuery 调用,所以我不确定我做错了什么。
我的相关代码:
post.js.coffee
jQuery ->
# Ajax search on submit
$('.search_form').submit( ->
$.get(this.action, $(this).serialize(), null, 'script')
false
)
post_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
显示.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'
我已经在那里有了“/搜索”路线。对吗?在这种情况下,问题出在其他地方吗?其余的代码看起来不错吗?
编辑——根据 Damien 的建议,向 PostsController 添加了搜索方法。感兴趣的新事物是 a) 我调用部分的方式,新的搜索操作,然后我尝试用“Post.all”替换 Post.rb 中的 show 方法的内容,但它仍然没有显示任何东西。但是,没有抛出错误。