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