限制rails-jquery-autocomplete(rails3-jquery-autocomplete)gem的范围 - where子句问题

时间:2015-11-03 21:59:37

标签: ruby-on-rails jquery-ui ruby-on-rails-4 autocomplete

有一个推荐的解决方案,它似乎工作。问题出在我的where子句中,我不确定是什么错。 作为参考,这是解决方案:

我正在尝试范围作为我的节点控制器中current_user的家谱树成员(分支)用户的成员的用户。这通常使用此代码(current_user.family_tree.memberships)完成。

注意我已成功将其设置为自动完成功能,显示所有用户(User.all):

在我的路线中:

resources :nodes do
  get :autocomplete_user_first_name, :on => :collection
end  

在我的Node控制器中,我有以下代码:

autocomplete :user, :first_name, :extra_data => [:last_name, :email],
 display_value: :full_name

在我看来,我有以下形式:

<%= form_for node do |f| %>
  <%= f.label :user_tags %>
  <%= f.autocomplete_field :user_tags, autocomplete_user_first_name_nodes_path, 'data-auto-focus' => true, value: nil %>
  <%= f.submit %>  
<% end %>

当我尝试将推荐的解决方案添加到节点控制器时:

def get_autocomplete_items(parameters)
  items = super(parameters)
  items = items.where(:user_id => current_user.family_tree.memberships)
end

我收到此消息: NoMethodError - super: no superclass method "get_autocomplete_items" for #<NodesController:0x007fc516692278>:

所以,我发现这篇文章https://stackoverflow.com/a/18717327/4379077并将其更改为

def get_autocomplete_items(parameters)
  items = active_record_get_autocomplete_items(parameters)
  items = items.where(:user_id => current_user.family_tree.memberships)
end

它有效,但我收到以下错误 PG::UndefinedColumn: ERROR: column users.user_id does not exist,所以我将where子句更改为此:id => current_user.family_tree.memberships,我得到了此结果

User Load (0.9ms)  SELECT  users.id, users.first_name, "users"."last_name",
"users"."email" 
FROM "users"  WHERE (LOWER(users.first_name) ILIKE 'mi%')
AND "users"."id" IN (SELECT "memberships"."id" FROM "memberships"  
WHERE "memberships"."family_tree_id" = $1)  
ORDER BY LOWER(users.first_name) ASC LIMIT 10  [["family_tree_id", 1]]

问题在于我认为我需要在成员模型中获取一个集合,将属性membership.user_iduser.id进行比较。我的where子句中我做错了什么?

1 个答案:

答案 0 :(得分:2)

成员资格对象与用户是否相同?

如果没有,则需要将user_id从会员记录中删除

此行需要更改

# use pluck to get an array of user_ids.
items = items.where(:id => current_user.family_tree.memberships.pluck(:user_id))