0

我正在尝试在 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”时没有出现在搜索结果中。

[我想在这里显示图片,但我需要五个声望点。]

自然地,我认为 Ransack 不知何故搞砸了查询。但是,当我将 @users 变量输出到页面时,通过放置

<%= @users.each do %>
<% end %>

在视图中,“失踪”用户在名称列表中,你瞧,出现在结果列表中!

有谁知道为什么会发生这种情况,以及如何在不将@users 变量的内容打印到屏幕上的情况下获得“正确”的结果集?我曾尝试将 '=' 符号从@users.each do行中删除,但行为又回到了上述问题中提到的行为。

非常感谢您提供的任何帮助!

PS我可能应该显示我的整个视图文件以防万一它可能有用:

<% 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 %>
4

1 回答 1

0

嗯,我觉得有点笨拙。在解决另一个问题一段时间后,我突然想到可能只是显示的信息有误。果然,当我检查 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">
&nbsp;
</div>

<div id="all_users_list">
<%= will_paginate %>
<ul class="users">
    <%= render @users %>
</ul>
<%= will_paginate %>
</div>

正如我所说,这是一个愚蠢的错误,但我们每天至少一次都是笨蛋!

于 2013-01-13T12:28:50.550 回答