我是AJAX搜索的新手,也是Rails的新手。我正在尝试在我的应用程序的侧边栏中创建一个搜索表单,以便它包含在每个页面上。只有在输入搜索时,我才需要将搜索结果显示在当前页面上。
我有一个'电影'表,我刚开始搜索'标题'列。这是我到目前为止所拥有的。现在搜索不仅返回div中的搜索结果,也不返回当前页面上的任何结果。使用Rails 4.0.0。
_sidebar.html.erb
<aside id="sidebar">
<nav>
<%= form_tag movies_path, :method => 'get', :id => "movies_search" do %>
<center>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
</center>
<div id="cresults_div" style="float:right; width:300px;"><%= render 'cresults' %></div>
<% end %>
<ul style="margin-top: 300px;">
<li class="all-movies">
<%= link_to 'All Movies', movies_path, class: 'button' %>
</li>
<li class="create-movie">
<%= link_to 'Add New Movie', new_movie_path, class: 'button' %>
</li>
</ul>
</nav>
</aside>
movies_controller.rb
def index
@movies = Movie.released
@movies = Movie.search(params[:search])
end
end
movie.rb
def self.search(search)
if search
where('title LIKE ?', "%#{search}%")
else
scoped
end
end
_cresults.html.erb
<h2>Search Results: </h2>
<table>
<tr>
<th>Title:</th>
<th style="width:85px;">Released: </th>
<th>Rating: </th>
</tr>
<% @movies.each do |movie| %>
<tr>
<td><%= link_to movie.title, movie %></td>
<td><center><%= movie.released_on.year %></center></td>
<td><center><%= movie.rating %></center></td>
</tr>
<% end %>
</table>
movies.js
$(function() {
$('#movies_search').submit( ->
$.get(this.action, $(this).serialize(), null, 'script')
false
});
$(function() {
$('#movies_search input').keyup( ->
$.get($("#movies_search").attr("action"), $("#movies_search").serialize(), null, 'script')
false
});
});
movies.js.erb
$("#cresults_div").html("<%= escape_javascript(render("cresults")) %>");
我也尝试将movies.js中的相同代码放入application.js,但结果没有变化。
答案 0 :(得分:1)
所以我能够弄明白。希望这可以帮助其他人,但这是我改变了:
<强> Movies.js 强>
$(function () {
$('#movies_search input').keyup(function () {
if ($(this).val().length < 1 && e.keyCode != 13) return;
$.get($('#movies_search').attr('action'), $('#movies_search').serialize(), null, 'script');
return false;
});
})
$(function () {
$('button').click(function () {
$.get($('#movies_search').attr('action'), $('#movies_search').serialize(), null, 'script');
return false;
});
})
Application.js - 删除了导致AJAX搜索仅在索引页面上工作的此要求。
//= require turbolinks
添加 index.js.erb
$("#cresults_div").html("<%= escape_javascript(render('cresults')) %>");
稍微更改了 _sidebar.html.erb 文件:
<aside id="sidebar">
<nav>
<%= form_tag movies_path, :method => 'get', :id => "movies_search" do %>
<center>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
</center>
<% end %>
<div id="cresults_div" style="margin-left: 13px; width:300px;"></div>