Ruby on rails Rails gem rails3 jquery自动完成如何按用户确定范围

Ruby on rails Rails gem rails3 jquery自动完成如何按用户确定范围,ruby-on-rails,ruby,ruby-on-rails-3,jquery-autocomplete,named-scope,Ruby On Rails,Ruby,Ruby On Rails 3,Jquery Autocomplete,Named Scope,我正在使用Rails gem rails3 jquery自动完成功能向帖子添加类别 我想限制搜索只包括属于结果中当前用户或帖子作者的类别 文档中说我可以指定一个范围: :范围 添加了使用作用域的选项。在数组中传递作用域。e、 g:范围=> [:范围1,:范围2] 但我不确定如何在这里传递用户id 这似乎是一个科蒙场景,我是否错过了一些明显的东西 我找到了一个建议修改get\u item方法的答案,但这似乎破坏了自动完成功能 在中发布控制器: def get_autocomplete_items

我正在使用Rails gem rails3 jquery自动完成功能向帖子添加类别

我想限制搜索只包括属于结果中当前用户或帖子作者的类别

文档中说我可以指定一个范围:

:范围

添加了使用作用域的选项。在数组中传递作用域。e、 g:范围=> [:范围1,:范围2]

但我不确定如何在这里传递用户id

这似乎是一个科蒙场景,我是否错过了一些明显的东西

我找到了一个建议修改
get\u item
方法的答案,但这似乎破坏了自动完成功能


中发布控制器

 def get_autocomplete_items(parameters)
    items = super(parameters)
    items = items.where(:user_id => current_user.id)
  end
我首先调用原始的get\u autocomplete\u items方法,然后根据当前的\u user.id筛选出结果

这个问题有助于: 黛布的答案对我很有用。 代码可以稍微清理一下:

def get_autocomplete_items(parameters)
  super(parameters).where(:user_id => current_user.id)
end

由于上面的答案,我解决了一个类似的问题

我的autocomplete也适用于用户模型,但我需要将结果限制在用户的机构(机构有许多:用户)。我的控制器创建一个@institution实例变量,该变量可在视图中访问

尽管get_autocomplete_items方法无法直接访问实例变量,但我发现数据可以作为参数传递给autocomplete(注意:我使用的是simple_forms gem,因此输入调用看起来与标准rails语法略有不同)

我认为:

<%= f.input :email,  :url => autocomplete_user_email_institutions_path(:institution_id=>@institution.id.to_s), :as => :autocomplete %>

我的自动完成列表现在仅限于为特定机构工作的用户。

要回答@ctilley79提出的问题,多个自动完成不是问题,因为除了可以在参数散列中传递更多值外,您还可以访问自动完成参数。在我的表单上(作为一个例子),我有一个城市和一个Zip自动完成。我需要把城市限制在某个州。因此,我的控制器操作如下所示:

def get_autocomplete_items(parameters)
  if (parameters[:model] == City)
    super(parameters).where("state_id" => params[:state_id])
  else
    super(parameters)
  end
end

如果需要,您还可以访问该方法。对参数执行logger.debug以查看所有可用的参数。

我遇到了类似的问题。我们的站点是多租户的,所以所有内容都需要限定在租户的范围内

为了简化这一过程,我修改了Rails3jQuery自动完成,以接受另一个名为:base\u scope的选项。它需要一个字符串,该字符串获取eval,而不是使用模型。所有其他功能都可以工作,因此如果需要,可以附加其他作用域和where子句

我的叉子在这里:

我不确定我写的测试是否能证明它始终有效。我只是检查了它是否在items方法中使用了范围而不是模型

如果您有任何想法,我将不胜感激。不确定是否值得拉取请求


对于那些使用超级方法有困难的人,代码有一个小的更新。由于动态调度,上面的代码需要替换,如下所示:

def get_autocomplete_items(parameters) items = super(parameters) items = items.where(searchable: true) end def get_自动完成_项(参数) 项目=超级(参数) items=items.where(可搜索:true) 结束 为此:

def get_autocomplete_items(parameters) items = active_record_get_autocomplete_items(parameters) items = items.where(searchable: true) end def get_自动完成_项(参数) 项目=活动\u记录\u获取\u自动完成\u项目(参数) items=items.where(可搜索:true) 结束
参考资料:

我知道这个宝石和这个问题很老,但我发现自己正在使用这个宝石,最近需要这个答案。。。旧的答案将不再有效,因为在源代码中,方法get\u autocomplete\u items是动态生成的,并且在方法名称前面有ORM。这就是它对我起作用的原因。我假设大多数人也在使用ActiveRecord,但请检查autocomplete.rb方法“get_prefix”,以确定应该在方法名称前加什么才能使其工作

希望这能节省一些时间。成为你想要看到的改变和所有这些;)


假设您正在使用多个自动完成调用。覆盖它将破坏视图中所有其他自动完成字段。惨痛的教训。你知道怎么做吗fix@ctilley79看看我对你问题的回答 def get_autocomplete_items(parameters) items = active_record_get_autocomplete_items(parameters) items = items.where(searchable: true) end
def active_record_get_autocomplete_items(parameters)
  super(parameters).where(id: current_user.id)
end