2013-02-28 5 views
0

«Защиту показатьКак бы вы реорганизовать это

@dept = Dept.find(params[:id]) 
    @members = @dept.members_list.collect{|a|a.name} 
    dif = @dept.users.collect{|a|[a.name,a.id]} 
    @admin_list = @dept.admin_users.collect{|a|a.user} 
    @not_member_users = User.all_users - dif 
    @not_admin_user = (@dept.list_of_deptmembers - @dept.admin_users).collect{|a|[a.user.name, a.id]}'  

как я могу реорганизовать @not_admin_user ??

+0

Что вам нужно для этого по-другому? Возможно, вы найдете какой-то контекст или мотивацию. –

ответ

0

Для начала вы можете переместить всю эту логику в модель Dept.

def show 
    @dept = Dept.find(params[:id]) 
    @admin_list = @dept.admin_list 
    @members = @dept.members 
    @not_member_users = @dept.not_member_users 
    @not_admin_user = @dept.not_admin_user 
end 

class Dept < ActiveRecord::Base 
    def members 
    self.members_list.collect{ |a| a.name } 
    end 

    def admin_list 
    self.admin_users.collect{ |a| a.user } 
    end 

    def not_member_users(user = User) 
    dif = self.users.collect{|a|[a.name,a.id]} 
    user.all_users - dif 
    end 

    def not_admin_user 
    (self.list_of_deptmembers - self.admin_users).collect{|a|[a.user.name, a.id]} 
    end 
end 
+0

Спасибо! он работал ... –

+0

Я на самом деле пытался реорганизовать его сам, но я не использовал модель слишком много, но спасибо за технику –

1

Это быстрее и дешевле в некоторых случаях для поиска таблицы, основанные на id-х - это может быть один из тех случаев.

@dept = Dept.find(params[:id]) 

# assuming both `members_list` and `admin_users` actually point to `User` objects 
member_ids = @dept.members_list.collect(&:id) 
admin_ids = @dept.admin_users.collect(&:id) 
non_admin_id = member_ids - admin_ids 

non_admin_users = User.where("id in ?", non_admin_id) 
0

Лучше иметь дело с коллекциями объектов, а не с массивами атрибутов объектов. Таким образом, @members должен быть массивом из Member или User объектов, а не массивом строк для имен.

Это не может быть очень хороший ответ на ваш вопрос, но я бы следовать принципу вне-в развитии и цель, чтобы иметь возможность получить то, что вы хотите, как это:

def show 
    @dept = Dept.find(params[:id]) 
    @members   = @dept.members 
    @admin_list  = @dept.admin_users 
    @not_member_users = @dept.non_member_users 
    @not_admin_users = @dept.non_admin_users 
end 

В вашем МЭИ модель, настройте области/ассоциации, которые вернут соответствующие результаты в методы, описанные выше. Фильтрация результатов с Ruby - последнее средство.

Смежные вопросы