2012-05-05 7 views
0

У меня есть форма с полем «автозаполнение», которое использует jQuery Tokeninput. Основной вопрос, который просто ищет пользователь, чьи имя или имя пользователя совпадает с напечатанным текстом, является:Как написать этот запрос в Rails для автозаполнения с помощью JQuery Tokeninput?

#users_controller.rb 
def index 
    @users = User.where("LOWER(name) like ? OR LOWER(username) like ?", "%#{params[:q].downcase}%", "%#{params[:q].downcase}%").order('name ASC').limit(10) if params[:q] 

    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @users, :only => [:id, :name, :username] } 

end 

Это хорошо работает.

Мое приложение также имеет «модель последователя», и я хочу ограничить, какие пользователи появляются в поле автозаполнения, чтобы возвращались только «обратные последователи». «Ответственный последователь» - это тот, за кем я следую, который следует за мной назад ((A следует B) И (B следует A)].

У меня есть метод в модели пользователя, которая возвращает взаимные последователь для пользователя:

#user.rb 
# Users relation to Relationships 
has_many :relationships, :foreign_key => "follower_id", :dependent => :destroy 
has_many :followed_users, :through => :relationships, :source => :followed 
has_many :reverse_relationships, :foreign_key => "followed_id", 
           :class_name => "Relationship", 
           :dependent => :destroy 
has_many :followers, :through => :reverse_relationships, :source => :follower 

def reciprocal_followers 
    self.followers & self.followed_users 
end 

я могу получить взаимные последователь для человека, набрав текст:

@reciprocal_followers = current_user.reciprocal_followers 

Но как я pare, список которых соответствует типу текста? Как интегрировать существующий запрос autocomplete (@users = User.where ...) с @reciprocal_followers?

На английском языке: «Я хочу, чтобы автозаполнение отображало список из 10 ответивших пользователей, чье имя или имя пользователя похожи на то, что пользователь был введен в поле автозаполнения».

Как изменить запрос, определяющий «@users» для ограничения в соответствии с «сторонними последователями»?

ответ

0

Вот что я в конечном итоге разработка:

@users = current_user.reciprocal_followers.select {|u| u.name.downcase =~ /#{params[:q].downcase}/ || u.username.downcase =~ /#{params[:q].downcase}/}.sort_by { |u| [u.name, u.username] }.first(10) if params[:q] 

Друг рекомендовал также переместить это из users_controller.rb и в relationships_controller.rb, где у меня есть «следовать» и «неследовать» действия, так как я m действительно ищет список отношений, которые являются пользователями (и не просто хотят вернуть пользователей). Если я оставлю его в user_controller.rb, я должен, вероятно, перенести его из действия «index».

 Смежные вопросы

  • Нет связанных вопросов^_^