2015-11-03 31 views
0

有一個推薦的解決方案,它似乎工作。問題出在我的where子句中,我不確定有什麼問題。 作爲參考,這裏是解決方案(S):在rails上的限制範圍 - jquery-autocomplete(rails3-jquery-autocomplete)gem - where子句問題

我試圖內的,屬於CURRENT_USER的家譜成員的成員範圍用戶(分支機構)的用戶的我節點控制器。這通常使用此代碼(current_user.family_tree.memberships)完成。

注意我已經成功地將此設爲自動完成,顯示所有用戶(User.all):

在我的路線:

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

在我的節點控制器我有以下代碼:

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_id比較user.id內獲得的集合。我在where子句中做了什麼錯誤?

回答

2

成員資格對象與用戶相同嗎?

如果沒有,你需要得到USER_ID關閉會員記錄

該行需要改變

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

我知道我不應該感謝你的意見@swards,但你保存了我的理智。謝謝! – mike0416

+0

@swank,我將如何添加到此where子句其中:full_name不包含在node.user_tag_list集合中? – mike0416

+0

嘗試編輯這個'autocomplete:user,:first_name,:extra_data => [:last_name,:email],display_value :: full_name'來查看是否可以修復它。像這樣配置顯示值將顯示全名。更多在這裏我想:https://github.com/crowdint/rails3-jquery-autocomplete – Swards