I forgot to mention that where() returns an array where as find_by_foo 
returns a single object unless there are multiple objects...

-----

Another way would be to change:

roles = user.roles.find_by_account_id(account.id)

to

roles = user.roles.where(account_id: account.id)

On Thursday, May 31, 2012 1:25:49 PM UTC-4, Mohamad El-Husseini wrote:
>
> Another way would be to change:
>
> roles = user.roles.find_by_account_id(account.id)
>
> to
>
> roles = user.roles.where(account_id: account.id)
>
> On Thursday, May 31, 2012 1:22:42 PM UTC-4, Everaldo Gomes wrote:
>>
>> Hi! 
>>
>> There are many ways to solve this problem. 
>>
>> One sugestion, maybe not the better: you can use the method kind_of? 
>> to see if roles is a Array. 
>>
>> roles.kind_of? Array 
>> (will return true) 
>>
>> Then, you could build your logic upon this. 
>>
>> Best Regards, 
>> Everaldo 
>>
>> On Thu, May 31, 2012 at 2:04 PM, Mohamad El-Husseini 
>> <[email protected]> wrote: 
>> > I'm trying to use CanCan to an account scoped application. I wrote this 
>> > method in my ability class: 
>> > 
>> >     roles = user.roles.find_by_account_id(account.id) 
>> >     if roles.any? { |role| role.type == "Ownership" } 
>> >       can :edit, Account 
>> >     else 
>> >       can :read, :all 
>> >     end 
>> > 
>> > The trouble is, "any?" works when "roles" is an array. Sometimes, 
>> however, 
>> > user.roles returns only one object any other times my return nil. So 
>> calling 
>> > roles.any? causes an error. How do I work around this? 
>> > 
>> > My setup is User has_many Accounts through :roles, and vice-versa. 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> Groups 
>> > "Ruby on Rails: Talk" group. 
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msg/rubyonrails-talk/-/mORQoYLqDtwJ. 
>> > To post to this group, send email to [email protected]. 
>>
>> > To unsubscribe from this group, send email to 
>> > [email protected]. 
>> > For more options, visit this group at 
>> > http://groups.google.com/group/rubyonrails-talk?hl=en. 
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/o9ZLULIE9hoJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to