Я хочу отфильтровать страницу индекса, используя форму, которая фильтрует с помощью флажков, не обновляя страницу.Это индекс 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)) %>");
Может кто-нибудь помочь мне понять, что я делаю не так?