0

我已经安装了ransack,它似乎很容易使用。但是,当我单击搜索时,它只会刷新页面,不会显示正确的数据。在页面上,我有一个搜索框,其中列出了所有注册的用户名(管理员和用户)。对于搜索框,我输入了“管理员”,当我单击搜索时,页面重新加载,我继续看到所有注册用户(管理员和用户)。它应该仅在搜索后显示“管理员”。知道为什么会这样吗?

用户控制器:

  def index
     @search = User.search(params[:q])
     @users = @search.result
     @users = User.all
   end

索引.html:

<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :username_cont, "Name contains" %>
    <%= f.text_field :username_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

<% @users.each do |user| %>
    <li>
       <%= link_to user.username, user %>
        <% if current_user.admin? || current_user == @user %>
            <%= link_to "Edit #{user} profile", user %>
            | <%= link_to "delete", user, method: :delete,
                                          data: { confirm: "You sure?"} %>
        <% end %>
        </li>
        <% end %>
4

2 回答 2

1

您应该得到所有结果而不是搜索结果......您正在覆盖实例变量

这个:

@users = @search.result
@users = User.all

应该只是:

@users = @search.result

或者更好:

@search = User.search(params[:q])
if params[:q].present?
  @users = @search.result
else
  @users = User.all
end

综上所述...您的表单是否提交了“q”的参数?我不知道洗劫,但我认为你的形式也需要改变。

于 2013-04-24T17:41:13.790 回答
0

您正在使用 覆盖搜索结果@user = User.all。删除该行。

您的表单可能没问题,因为那是您正在使用的 ransack builder,并且您说它返回到当前页面。当它返回到当前页面时,您http://localhost:3000/users?q= (search parameters here)在 url 中看到了吗?

于 2013-04-24T17:51:43.367 回答