has_and_belongs_to_many -- has anyone made this easier yet?

Not that this isnt REALLY EASY already.. it is!!! I was just wondering if someone had already waved their magic wand on this problem. :slight_smile:

I've got users and groups.. both has_and_belongs_to_many eachother. I want to be able to check for the users and groups by ID# or string to make the coding easier. So in User, I have this:

  has_and_belongs_to_many :groups, :join_table => "users_groups" do     def include?(group)       if group.class == Fixnum         group = Group.find group       elsif group.class == String         group = Group.find_by_name group       end       super     end   end

and in Group, I have this:

  has_and_belongs_to_many :users, :join_table => "users_groups" do     def include?(user)       if user.class == Fixnum         user = User.find user       elsif user.class == String         user = User.find_by_name user       end       super     end   end

... is there a way to do it better, more clearly, with less lines of code?

  Thanks,     Tyler

Tyler MacDonald wrote:

Not that this isnt REALLY EASY already.. it is!!! I was just wondering if someone had already waved their magic wand on this problem. :slight_smile:

I've got users and groups.. both has_and_belongs_to_many eachother. I want to be able to check for the users and groups by ID# or string to make the coding easier.

Could you show some unit tests that reveal what this easier coding is supposed to look like?

Not a chance. What I was hoping to do was eliminate that "do" block and have some magic wand to replace it that recognizes that when I do something like:

user.groups << "Admin"

or

user.groups << 1

it will just do the right thing.

However, my pride and respect for ruby is brimming right now, so I will share my modified acts_as_authenticated, which allows you to do:

require_group :Admin

(or any other group name) in a controller, and have login decisions based upon that. :slight_smile:

  - Tyler

admin_controller.rb (106 Bytes)

authenticated_system.rb (3.34 KB)

group.rb (325 Bytes)

user_group.rb (112 Bytes)

user.rb (2.62 KB)