Фильтрация пользователей с помощью флажков для данных профиля в Rails - PullRequest
1 голос
/ 16 августа 2011

Я просматривал это предыдущее сообщение об использовании флажков для фильтрации результатов в Rails, но немного потеряно. Я новичок в программировании, но хочу фильтровать пользователей на моей странице индекса в зависимости от того, какие данные профиля проверяются на боковой панели. В идеале страница индекса должна начинаться со всех пользователей, а затем фильтроваться в зависимости от флажков. Вот соответствующая информация из моих моделей User и Profile, контроллера пользователя и файла index.html.erb:

Модель пользователя:

class User < ActiveRecord::Base
  attr_accessor :password, :email
  validates :email, :uniqueness => true, 
                :length => { :within => 5..50 }, 
                :format => { :with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i }
  validates :password, :confirmation => true,
                   :length => { :within => 4..20 },
                   :presence => true,
                   :if => :password_required?  
  has_one :profile, :dependent => :destroy

Модель профиля:

class Profile < ActiveRecord::Base
  attr_accessible :field_1, :field_2, :field_3, :field_4...
  belongs_to :user

Пользовательский контроллер:

def index
  @user = User.all
end

index.html.erb:

  <% form_for 'user' do |f| %>
  <table id="Criteria">
    <tr>
      <td class="main head">Fields</td>
      <td></td>
    </tr>
    <tr>
      <td class="head">Field_1:</td>
      <td></td>
    </tr>
    <tr>
      <td class="normal"><%= current_user.profile.field_1 %></td>
      <td><% check_box_tag :field_1 %></td>
    </tr>

Если кто-нибудь может помочь объяснить это, я буду очень признателен! (И если потребуется дополнительная информация, дайте мне знать.)

1 Ответ

1 голос
/ 16 августа 2011

Полагаю, вам стоит взглянуть на камень мета-поиска . Я использовал это, чтобы решить подобную проблему здесь http://omaris.kg/categories/2-zhenskaya-obuv

UPD

У меня есть Item модель, в которой я определил области, которые фильтруют элементы в соответствии с запросом пользователя. Ниже приведена область действия фильтра по брендам:

scope :by_brands, lambda {|brands|
 brands = brands.delete_if {|i| i == "" } if brands.present?
 return if brands.blank?
 composed = self.scoped

 composed = composed.where("brand_id IN (?)", brands)
 composed
}

Затем я создал class метод searchy(search) (не нашел лучшего названия XD), где я вызываю каждую область видимости один за другим, как self.by_brands(search[:brands]).by_price_range(search[:from], search[:to])... search параметр будет params[:searchy]

Тогда я использовал как Item.searchy(params[:search]) в моем контроллере. params[:searchy] получаются из блока form_for в представлении.

Вот и все, наверное)

P.S .: Впервые я хотел использовать драгоценный камень MetaSearch, чтобы использовать его heplers в моей форме. Но я обошелся без этого и построил свой собственный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...