AJAX 和搜索的新手。我觉得我离这个还有一英寸,但我不确定要解决什么问题。另外,我的控制器现在对我来说真的很老套。
无论如何,我正在尝试创建一个搜索,允许用户使用 AJAX 在我的页面上搜索博客文章。以下是(相关部分)部分:
post_controller.rb
def show
@posts = Post.all.reverse
@post = Post.find(params[:id])
@link_num = 10
respond_to do |format|
format.html # show.html.erb
format.json { redirect_to @post }
end
end
def search
@link_num = 10
@posts = Post.all.reverse
@post = Post.find(params[:id])
#The including function returns the search results
@search = Post.first.including(params[:term])
render 'show'
end
让我觉得“hacky”的地方是我重复了所有的变量赋值(还有一些我没有展示,因为它们不相关)。理想情况下,AJAX 调用是否不应该重新定义/重新加载所有这些变量?此外,我必须通过隐藏字段将 :id 传递给我的搜索操作。这对我来说感觉很奇怪/错误。
显示.html.erb
<h1 class="squeeze">Recent Posts</h1>
<%= form_tag("/search", method: "get", class: "search") do %>
<%= text_field_tag(:term, '', placeholder: "Search posts:") %>
<%= hidden_field_tag(:id, @post.id) %>
<%= submit_tag("Search", class: "btn search_button", remote: true) %>
<% end %>
<% if !@search%>
<ul>
<% @posts.first(@link_num).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 %>
<% if @posts.length > @link_num %>
<div class="link_disclaimer">
<h4>---</h4>
<h5><%= "Only showing #{@link_num} most recent posts." %></h5>
<h5>Search to narrow results.</h5>
</div>
<% end %>
</ul>
<% elsif @search.empty? %>
<h3>Term not found!</h3>
<% else %>
<ul>
<% @search.first(@link_num).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 %>
<% if @search.length > @link_num %>
<div class="link_disclaimer">
<h4>---</h4>
<h5><%= "Only showing first #{@link_num} relevant hits." %></h5>
<h5>Narrow search for more specific results.</h5>
</div>
<% end %>
</ul>
<% end %>
路线.rb
match '/search', to: 'posts#search'
目前,搜索本身运行良好,存在三个主要问题:
- 我的控制器的上述混乱。
- 整个页面重新加载的事实。这不与 AJAX 应该做的相反吗?我怎样才能让它重新加载链接列表?
- 网址。它超级混乱(即“/search?utf8=✓&term=limits&id=11&commit=Search”)。理想情况下,我希望它不受搜索影响,但如果这不可能,也许只是像“/search?=”这样的东西。那是怎么做的?