Ruby on rails 为用户索引结果提供上下文

Ruby on rails 为用户索引结果提供上下文,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在我的Rails 3应用程序中,我有一个使用复选框筛选的用户索引。我想为过滤结果提供一些上下文。比如说,如果我查看家乡,我想提供一些对话框,上面写着“20人来自你的家乡”之类的话。有没有一种方法很容易掌握 我知道的足够多,可以返回每个搜索使用呈现的用户数,但是如何根据搜索参数添加上下文 下面是我的代码示例: <%= search_form_for @q, :url => search_users_path, :html => {:method => :post} do |

在我的Rails 3应用程序中,我有一个使用复选框筛选的用户索引。我想为过滤结果提供一些上下文。比如说,如果我查看家乡,我想提供一些对话框,上面写着“20人来自你的家乡”之类的话。有没有一种方法很容易掌握

我知道的足够多,可以返回每个搜索使用
呈现的用户数,但是如何根据搜索参数添加上下文

下面是我的代码示例:

<%= search_form_for @q, :url => search_users_path, :html => {:method => :post} do |f| %>
  <table id="careerCriteria">
    <tr>
      <td class="head">Hometown:</td>
      <td></td>
    </tr>
    <tr>
      <td class="normal"><%= current_user.profile.hometown %></td>
      <td class="check"><%= f.check_box :profile_hometown_cont, {}, "#{current_user.profile.high_school}", '' %></td>
    </tr>
<% end %>
<% @users.each do |user| %>
<div class="userSnapshot">
...
</div>
<% end %>
search_users_path,:html=>{:method=>:post}do | f |%>
家乡:
...
首先,检查gem。它非常适合简单的过滤器需求。如果需要更复杂的东西,可能需要滚动自己的对象

创建一个与ActiveModel兼容的类,并对使用
form\u

例如,在
app/models/user\u filter.rb
中放置类似的内容:

class UserFilter
  extend ActiveModel::Naming
  include ActiveModel::Conversion

  def persisted?
    false
  end

  attr_accessor :hometown, :user

  def initialize(user, attributes = nil)
    @user = user
    if attributes
      attributes.each do |name, value|
        send "#{name}=", value
      end
    end
  end

  def count
    @count ||= users.count
  end

  def users
    if hometown?
      User.where(:hometown => user.hometown)
    else
      User.scoped
    end
  end

  def hometown?
    hometown == "1"
  end

  def message
    if hometown?
      "There are #{count} users from your home town"
    else
      "There are #{count} users"
    end
  end

end
现在,您可以将
UserFilter
用于索引操作,而不是
User
-类:

def index
  @user_filter = UserFilter.new(current_user, params[:user_filter])
end
在您看来(简化):

users_路径,:method=>:get do | f |%>
我会从这样的东西开始,但会很快创建一些其他类来解决重复签入消息和其他东西

一开始,ActiveModel有点难以适应,所以请多玩一玩,好好阅读

我希望这能给你一些前进的思路

<%= form_for @user_filter, :path => users_path, :method => :get do |f| %>
  <%= f.check_box :hometown %>
<% end %>

<%= @user_filter.message %>

<% @user_filter.users.each do |user| %>
  <td><%= user.name %></td>
<% end %>