尝试在this post之后的Rails 3应用程序中找出Ajax搜索,它本身借用了Railscast。目前,当我提交时,没有任何反应,如果我进入Chrome控制台,我会看到此错误:
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'
我已经有了'/ search'路线。这是对的 - 在这种情况下,问题出在其他地方吗?其余代码看起来是否很好?
编辑 - 根据Damien的rec,将搜索方法添加到PostsController。感兴趣的新东西是a)我调用部分,新搜索操作的方式,然后我试图用Post.rb替换show.rb中show方法的内容,它仍然没有什么都有。但是,没有错误抛出。答案 0 :(得分:1)
“没有搜索行动!没有意识到我需要一个。应该是什么? 当我尝试没有AJAX的早期版本时,我进行了搜索 动作基本上是show(+ @search等)的复制品,全部 相同的变量,否则它将无法工作,因为它呈现 节目页面。这是正确的想法吗?它看起来非常简单“
使用AJAX,无需呈现整个show
页面。只需返回所需格式的过滤结果:
def search
@search = Post.search(params[:search])
render json: { results: @search }
end
如有必要,添加基于格式的退货。