2011-10-19 72 views
0

如何爲此添加if語句?如果聲明下降

<%= f.select(:manager_user_id,User.all.collect {|用戶| [user.full_name,user.id]}排序{| A,B | A [0] = < > b [0]},:提示=> 「選擇項目經理」)%>

它需要此檢查用戶是否具有作用ProjectManager

if user.has_role? :ProjectManager 
+0

你想選擇只出現如果用戶是ProjectManager ?或者您想列出所有屬於項目經理的用戶? – Gerry

+0

我想選擇顯示所有項目經理 – ahmet

+1

您不添加if語句,您只選擇作爲項目經理的用戶。 –

回答

0

嘗試

<%= f.select(:manager_user_id, User.all.select { |user| user.has_role?(:ProjectManager) }.collect {|user| [user.full_name, user.id]}.sort{|a, b| a[0] <=> b[0]}, :prompt => "Select a Project Manager") %> 
+0

當然,這是完全錯誤的,因爲它會從數據庫中提取所有用戶。你絕對不應該這樣。我添加@alassiter的修改後的答案只是爲了使其正確。 – Gerry

+0

這個答案是當我回答問題時想到的第一個想法。現在我意識到它會導致性能問題。我接受你的答案是更好的解決方案。 –

1

所以,我會成立一個範圍在用戶模式:

scope :project_managers, where(...) 

那麼你可以說

<%= f.select(:manager_user_id, User.project_managers.select { |user| user.has_role?(:ProjectManager) }.collect {|user| [user.full_name, user.id]}.sort{|a, b| a[0] <=> b[0]}, :prompt => "Select a Project Manager") %> 

,我認爲這是正確的。我還在學習。

0
class User < ActiveRecord::Base 
    scope :project_managers, where(...) 
end 

然後在您的視圖寫

<%= f.collection_select(:manager_user_id, User.project_managers, :full_name, :id, :prompt => "Select a Project Manager") %> 

如果要排序只是做在你的範圍或者在你的實例方法:project_managers