我试图在Rails应用程序中的用户索引页面上放置搜索工具(类似于Michael Hartl的Rails教程),并使用Ransack gem进行搜索。这只是一个简单的搜索用户的名字,我已经实现如下:
用户控制器:def index
@title = "All Users"
@search = User.search(params[:q])
@users = @search.result.paginate(page: params[:page])
end
索引视图:
<%= search_form_for @search do |f| %>
<%= f.text_field :name_cont, id: :search_box %>
<%= f.submit "Search" %>
<% end %>
问题是这样的:当我进入索引页面并搜索实际出现在那里的用户时,他们可能不会出现。例如,Linnie Bahringer夫人出现在原始列表中,但当我搜索"lin"时,却没有出现在搜索结果中。
[我想在这里展示图片,但不能,因为我还需要5个声望点]
自然地,我认为Ransack在某种程度上搞砸了这个问题。但是,当我将@users变量输出到页面时,通过输入
<%= @users.each do %>
<% end %>
显示在视图中,'missing'用户出现在名称列表中,并且出现在结果列表中!
有没有人知道为什么这可能会发生,以及我如何能够以"正确"的结果集结束,而不将@users变量的内容打印到屏幕上?我曾尝试将'='符号从@users.each do
行中取出作为黑客,但行为返回到上面问题中提到的。
事先非常感谢你能给的任何帮助!
我可能应该显示我的整个视图文件,以防万一它可能会使用:<% provide :title, 'All Users' %>
<h1>All Users</h1>
<div class="span3 offset9 btn-group">
<%= search_form_for @search do |f| %>
<%= f.text_field :name_cont, id: :search_box %>
<%= f.submit "Search" %>
<% end %>
</div>
<%= will_paginate %>
<!-- This bit is only in to show the value of @users -->
<%= @users.each do %>
<% end %>
<!-- Extra bit ends. -->
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
嗯,我觉得自己有点笨。在另一个问题上工作了一段时间后,我想到可能只是信息的显示出错了。果然,当我检查HTML源代码时(我很惊讶我在发布问题之前忘记了),"失踪"的用户在其中。
我通过在列表上方的div(几乎是@users.each do
位)中放置一个不间断的空格来解决这个问题,然后将该div的CSS设置为在其中包含clear: both;
。
这是我更新后的视图:
<% provide :title, 'All Users' %>
<h1>All Users</h1>
<div class="span3 offset9 btn-group">
<%= search_form_for @search do |f| %>
<%= f.text_field :name_cont, id: :search_box %>
<%= f.submit "Search" %>
<% end %>
</div>
<div id="clear-space">
</div>
<div id="all_users_list">
<%= will_paginate %>
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
</div>
就像我说的,这是一个愚蠢的错误,但我们都是笨蛋至少一天一次!