Фильтр форм на странице индекса с использованием кросс-модельной области - PullRequest
1 голос
/ 19 сентября 2011

Я хочу отфильтровать страницу индекса, используя форму, которая фильтрует с помощью флажков, не обновляя страницу.Это индекс Users, но я фильтрую в зависимости от данных Profile.Я новичок в программировании, и мне удалось собрать воедино кое-что из того, что я пытаюсь сделать, но мне нужна помощь, чтобы соединить все это.(Для справки, для руководства по областям я использовал эту статью и для формы / ajax / jQuery я использовал эту статью .)

User.rb:

class User < ActiveRecord::Base
  has_one :profile, :dependent => :destroy
  scope :profiles, lambda {
    joins(:profiles).group("users.id") & Profile.id
  }
end

Profile.rb:

class Profile < ActiveRecord::Base
  belongs_to :user
  class << self
    def search(q)
      [:high_school, :higher_ed, :current_city, :job_title, :hometown, :subject].inject(scoped) do |combined_scope, attr|
        combined_scope.where("profiles.#{attr} LIKE ?", "%#{q}%")
      end
    end
  end
end

UsersController:

class UsersController < ApplicationController
  def index
    @users = User.all
  end

  def update
    @user = current_user
    @user.update_attributes(params[:user])
  end

  def search
    if params[:profiles].blank?
      raise "You must provide search criteria."
    end
    params[:profiles] = "%#{params[:profiles]}%"
    conditions    = " Description LIKE :term"

    @users = User.all(
        :conditions => [conditions, params],
        :offset     => params[:offset],
        :limit      => params[:limit]
    )

    respond_with @users
  end
end

ProfilesController:

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

  def index
    @profile = current_user.profile
  end

  def update
    @profile = user.profile
    if @profile.update_attributes(params[:profile])
      redirect_to profile_path, :notice => 'Updated user information successfully.'
    else
      render :action => 'edit'
    end
  end
end

Routes.rb:

resources :users do
    get "search/:term/:offset/:limit.:format", :action => "search", :constraints => { :offset => /\d+/, :limit => /\d+/ }
end

Пример из index.html.erb:

<%= form_tag users_path, :id => 'users_index', :method => :get, :remote => true  do %>
<table>
  <tr>
    <td class="normal"><%= current_user.profile.high_school %></td>
    <td><%= check_box_tag 'high_school', :class => 'submittable' %></td>
  </tr>
</table>
<% end %>

Где мои пользователи отображают на index.html.erb:

<div class="searchresults">
  <div id="wall">
    <% @users.each do |user| %>
    <% end %>
  </div>
</div>

index.js.erb:

$("#wall").html("<%= escape_javascript(render(@users)) %>");

Может кто-нибудь помочь мне понять, что я делаю не так?

1 Ответ

0 голосов
/ 05 октября 2011
  1. form_for @user обновление вызовов.Вы должны сделать это вместо этого:

    = form_tag "/ users / search",: method =>: get

  2. ???Я думаю, что нам нужно будет увидеть ваш код JavaScript.

В общем, я настоятельно рекомендую вам отложить свой код и следовать скринкасту Райана Бэйта для формы расширенного поиска , естьмногие вещи должны быть решены / улучшены, как сейчас.

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