使用范围和复选框过滤索引

时间:2011-09-14 04:06:28

标签: ruby-on-rails-3 filtering

就像SO上的许多问题一样,我试图构建一个表单,其中复选框过滤我的索引视图。理想情况下,这可以通过AJAX进行,因此我不会重新加载任何内容。问题是我和Rails以及编程的初学者一样多,所以我需要帮助来解决这个问题。

我要过滤的索引是/ users,其中复选框的值附加到current_user的配置文件。例如,请考虑以下事项:

<% form_for(current_user.profile) do |f| %>
  <tr>
    <td class="normal"><%= current_user.profile.current_city %></td>
    <td><%= check_box_tag :current_city %></td>
  </tr>
  <tr>
    <td class="normal"><%= current_user.profile.hometown %></td>
    <td><%= check_box_tag :hometown %></td>
  </tr>
<% end %>

如果这对我的模型和数据库正常工作,单击其中一个或两个复选框将在我的索引部分中呈现相应的配置文件。

我认为我需要使用范围,但不知道如何使用这么多的配置文件属性。

UsersController:

class UsersController < ApplicationController
  before_filter :authenticate, :only => [:edit, :update]

  def index
    @user = User.all
    @profile = Profile.all
  end
end

用户模型:

class User < ActiveRecord::Base
  attr_accessor :password
  has_one :profile, :dependent => :destroy
end

个人资料模型:

class Profile < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
end

有人能指出我在正确的方向吗?我看过MetaSearch,但我想学习如何在没有宝石的情况下做到这一点。

1 个答案:

答案 0 :(得分:2)

所以,我认为这个问题的答案与你的相关问题的答案非常相似,How to make parts of Profile searchable or not

基本上,您需要将复选框与每列可见性标记的设置或可见性记录的创建/销毁相关联,具体取决于您的访问权限需要的精细程度。

也就是说,选中复选框应为该用户设置适当的可见性标记/记录(您可以通过AJAX执行此操作),取消选中它将清除/销毁相应的可见性标记/记录。

另一方面,如果您正在谈论的表单是全局的,“我为用户索引页面呈现的部分内容是什么?”管理员正在编辑的那种表单,然后设置一个名为你想要的表(partial_renderings?),其中包含布尔列,每个部分一个,在选中/取消选中复选框时设置/清除。

然后,部分渲染的if语句类似于:

...
<% if PartalRenderings.show_hometown %>
  <%= render :partial => "user_hometown", :locals => {:user => @user}
<% end %>
...

partial_renderings表可能只有一条记录,因为它只是一组标记。

然后PartialRenderings模型基本上是空的,因为你要做的就是检查布尔值。

最后,partial_renderings表的结构可以这样:

id | show_hometown | show_phone_number | show_real_name | ...etc...
--------------------------------------------------------------------
1  | true          | false             | false          | ...

如果部分呈现基于PER-USER,则partial_renderings表需要额外的user_id字段才能将其绑定到给定用户,因此允许用户决定呈现哪些内容,哪些没有。在这种情况下,您将拥有多条记录 - 每个用户只有一条记录。