2011-05-16 2 views
1

Cancan을 사용하므로 사용자 역할을 확인해야합니다. Users -> userroles (참조 ID) -> roles (각 역할의 이름, 역할은 이름 열에 있음)와 has_many 관계가 있어야합니다.수십 개의 역할에서 역할 확인

내 사용자 모델에는 역할 (역할)이 있습니다 (예 : role?(:admin)). 사용자에게 역할이 있는지 확인합니다.

def role?(role) 
    roles.include? role.to_s 
end 

이것은 작동하지 않습니다. 이름 열을 지정해야합니까?

해결 : 시간이 지나면 답을 내려 드리겠습니다.

답변

2

당신은 객체

def role?(role) 
    !roles.first(:conditions => {:name => role.to_s}).nil? 
end 

이 시도 문자열을 비교하는거야? 드미트리 Likhten의 답변에 따라

대체 당신은 항상 그냥 라인을 필터링 할 수 있습니다

def role?(role) 
    roles.collect{|r| r.name }.include? role.to_s 
end 
1

...

roles.select(&:to_s).include?(role.to_s) 
내 지미의 접근 방식의 차이가에 따라 달라집니다

여부 역할은 이미 메모리에 있습니다. 그렇다면 필터링이 더 빠릅니다. 그렇지 않으면 쿼리가 더 좋습니다.

+0

'select' 대신'collect'을 사용해서는 안됩니까? 'select'는 객체를 반환 할 것이고,'collect'는 문자열의 배열을 반환 할 것입니다. 또한 역할 객체의'.to_s' 메쏘드가 그 이름을 반환한다고 가정하고 있습니다. – Jimmy

관련 문제