【问题标题】:Searching with Ransack - records not getting rendered, despite being in instance variable使用 Ransack 搜索 - 尽管位于实例变量中,但记录未呈现
【发布时间】:2013-01-12 19:22:45
【问题描述】:

我正在尝试在 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 %>

问题是这样的:当我进入索引页面并搜索实际出现在那里的用户时,他们可能不会出现。例如,当我搜索“lin”时,Linnie Bahringer 夫人出现在原始列表中,但没有出现在搜索结果中。

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

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

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 railstutorial.org ransack


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多