У меня есть форма с полем «автозаполнение», которое использует 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» для ограничения в соответствии с «сторонними последователями»?