我有一个使用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) AND (B 追随 A)]。
我在 User 模型中有一个方法,它为用户返回互惠的追随者:
#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
但是我如何根据输入的文本削减该列表?如何将现有的自动完成 (@users = User.where...) 查询与 @reciprocal_followers 集成?
用英语:“我希望自动完成显示最多 10 个互惠用户的列表,他们的姓名或用户名与用户在自动完成字段中输入的内容相同”。
如何修改定义“@users”的查询以根据“@reciprocal follower”进行限制?