我安装了ransack,看起来很容易使用。但是,当我单击搜索它只刷新页面时,不会显示正确的数据。在页面上,我有一个搜索框,列出了所有注册的用户名(管理员和用户)。对于搜索框,我输入了“admin”,当我点击搜索页面重新加载时,我继续看到所有注册用户(管理员和用户)。它应该只在搜索后显示'admin'。知道为什么会这样吗?
users_controller:
def index
@search = User.search(params[:q])
@users = @search.result
@users = User.all
end
的index.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 %>
答案 0 :(得分: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”的参数?我不知道搜索,但我认为你的形式也需要改变。
答案 1 :(得分:0)
您正在使用@user = User.all
覆盖搜索结果。删除该行。
您的表单可能没问题,因为您正在使用的是ransack构建器,并且您说它返回到当前页面。当它返回到当前页面时,您会在网址中看到http://localhost:3000/users?q= (search parameters here)
吗?