Hello, This is the case: A project has many users. a project has an admin. when I list the project users I don''t want to display the admin user so what I tried was: users = @project.users users.delete(admin_user) users.each { |u| { ... } but what happens is that the admin_user gets deleted from the project. is there a way to do a temporary delete without activerecord acting upon it and without having to check with an ''if'' inside the for loop? thanks -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
in your table you must have an field, that defines the role of the user. either an bool flag like is_admin, that can be true or false or a integer or string, with several states like admin, customer and so on. with a is_admin flag: users = @project.users.find_by_is_admin(false) with an integer role (0=normal user, 1 = admin) users = @project.users.find_by_role(0) with a string role ("admin" = admin, "user" = user...) users = @project.users.find_by_role("user") -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hello Thorsten, Thanks for the reply. I though of that suggestion but the problem is that there is a "permissions" table in between user and project which keeps the ''admin'' boolean. Yes it can be queried as well but I thought that would be just performance loss just to filter out one user. Getting all users of a project and just subtracting the admin_user (which I already have) seemed a better solution. Is there really no way for this similar to the way i did it: users = @project.users users.delete(admin_user) but then without actually deleting the record from DB? Thanks -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Very strange, as this should work just fine. I too would expect this to perform an Array#delete, not an ActiveRecord::Base.delete, and testing this in one of my projects worked fine. Can you verify that the result of @project.users is indeed an array? Jan --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
hm, i see. you want to use the array delete function. i''m not sure, how you could get the "old" one that was overwritten by ActiveRecord. maybe you could use delete_if, as far as i know that''s not recycled by Rails. users.delete_if {|u| u == admin_user } but since it has to go through the whole array and check every single item, you could do it in the loop, as far as performance is concerned. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hello Jan, Thanks for the reply. @project.users.class says it is an Array. when I don''t do the ''delete'' then the admin user does not get removed so this shouldn''t be a problem in another part of my code. strange indeed -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 21 Apr 2008, at 10:45, Jan-Christian Foeh wrote:> > Very strange, as this should work just fine. I too would expect this > to perform an Array#delete, not an ActiveRecord::Base.delete, and > testing this in one of my projects worked fine. > > Can you verify that the result of @project.users is indeed an array?It''s not an array, it''s an association proxy. u = @project.users u.delete(foo) is the same as @projects.users.delete(foo) (indeed there would be some very funky going on if it wasn''t). In this case you could do something like users_without_admin = @project.users.reject {|u| u == admin} or of course arrange for admin not to be in @project.users in the first place. Fred --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jiminy, I didn''t know that. And of course I tested it with a regular finder, not with an association .. my bad. Thanks Fred! --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> with a is_admin flag: > users = @project.users.find_by_is_admin(false)find_all_by_is_admin! --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---