我正在使用Rails gem rails3-jquery-autocomplete来为帖子添加类别。
我想将搜索限制为仅包含属于当前用户或帖子作者的类别。
文档说我可以指定范围:
:范围
添加了使用范围的选项。传递数组中的范围。例如:scopes => [:scope1,:scope2]
但我不确定如何在这里传递用户ID?
这似乎是一个comon场景,我错过了一些明显的东西吗?
我找到了一个建议修改get_item
方法的答案,但这似乎打破了自动完成
答案 0 :(得分:17)
在posts_controller
:
def get_autocomplete_items(parameters)
items = super(parameters)
items = items.where(:user_id => current_user.id)
end
我首先调用原始的get_autocomplete_items方法,然后通过current_user.id过滤掉结果。
答案 1 :(得分:8)
由于上面的答案,我遇到了类似的问题。
我的自动完成功能也适用于用户模型,但我需要将结果限制在用户的机构(机构有很多:用户)。我的控制器创建一个在视图中访问的@institution实例变量。
虽然get_autocomplete_items方法无法直接访问实例变量,但我发现数据可以作为参数传递给自动完成(注意:我使用的是simple_forms gem,因此输入调用看起来与标准的rails语法略有不同)
在我看来:
<%= f.input :email, :url => autocomplete_user_email_institutions_path(:institution_id=>@institution.id.to_s), :as => :autocomplete %>
在我的控制器中:
autocomplete :user, :email, :extra_data => [:first_name, :last_name]
def get_autocomplete_items(parameters)
super(parameters).where(:institution_id => params[:institution_id])
end
我的自动填充列表现在仅限于为特定机构工作的用户。
答案 2 :(得分:6)
def get_autocomplete_items(parameters)
super(parameters).where(:user_id => current_user.id)
end
答案 3 :(得分:3)
对于那些遇到超级方法问题的人来说代码有一个小的更新。由于动态调度,上面的代码需要替换如下:
def get_autocomplete_items(parameters) items = super(parameters) items = items.where(searchable: true) end
到此:
def get_autocomplete_items(parameters) items = active_record_get_autocomplete_items(parameters) items = items.where(searchable: true) end
参考:https://github.com/crowdint/rails3-jquery-autocomplete/issues/278
答案 4 :(得分:2)
要回答@ ctilley79提出的问题,多个自动填充不是问题,因为除了可以在params散列中传递更多值之外,您还可以访问自动填充参数。在我的表单上(作为示例),我同时拥有City和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以查看所有可用的内容。
答案 5 :(得分:1)
我知道这个gem和问题很旧,但是我发现自己正在使用这个gem并最近需要这个答案...所有的旧答案都不再有效,因为在源代码中,方法get_autocomplete_items是动态生成的,并且具有ORM在方法名称之前。这就是它为我工作的原因。我假设大多数人也使用ActiveRecord,但请检查autocomplete.rb方法“ get_prefix”以弄清楚应使用哪种方法名称才能使其正常工作。
希望这可以节省一些时间。成为您想看到的变化;)
def active_record_get_autocomplete_items(parameters)
super(parameters).where(id: current_user.id)
end
答案 6 :(得分:0)
我遇到了类似的问题。我们的网站是多租户,所以一切都需要与租户相关。
为了简化这一过程,我修改了rails3-jquery-autocomplete以接受另一个名为base_scope的选项。它需要一个字符串,它被eval'd而不是使用模型。所有其他功能都有效,因此您可以根据需要添加其他范围和where子句。
我的叉子在这里:https://github.com/GiveCorps/rails3-jquery-autocomplete
我不确定我写的测试证明它会一直有效。我只是检查了它是在items方法中使用范围而不是模型。
我会很感激任何想法。不确定它是否值得拉取请求。