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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 <husseini.mel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 > <husseini.mel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to > > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > 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/-/25k2ylUlcSsJ. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 >> <husseini.mel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >> >> > To unsubscribe from this group, send email to >> > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >> > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Nice, I forgot about that too... On Thu, May 31, 2012 at 2:26 PM, Mohamad El-Husseini <husseini.mel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> 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 >>> <husseini.mel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh4Ykp1iOSErHA@public.gmane.orgm. >>> > To unsubscribe from this group, send email to >>> > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >>> > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.