1

My app calls for Courses with Projects with Groups with Users. I need to make sure that users never appear more than once per project and I think I can do it with a Rails validation, but what I've got doesn't seem to want to work. Can anyone help me out with this?

The following gives me:

NoMethodError in Admin::GroupsController#create
undefined method `text?' for nil:NilClass

class Group < ActiveRecord::Base
  attr_accessible :name, :project_id
  #has_and_belongs_to_many fields
  attr_accessible :user_ids

  has_and_belongs_to_many :users
  belongs_to :project, :inverse_of => :groups

  validates :name, :project_id, :presence => true
  validates :user_ids, :uniqueness => { :scope => :project_id,
                                        :message => "Users can only be in one group per project." }
end

ActiveAdmin Group object:

ActiveAdmin.register Group do

  form do |f|
    f.inputs do
      f.input :name
      f.input :users, :as => :check_boxes
      f.input :project
    end
    f.buttons
  end

end
Micah Gideon Modell
  • 586
  • 1
  • 9
  • 24

1 Answers1

1

I would try

Course
  has_many :projects

Project
  has_many :groups
  has_many :users, :through => groups
  validates uniqueness_of :user

User
  has_many groups 
  has_many projects, :through => :groups

Group
  belongs_to :project
  belongs_to :group

# I stay away from has_and_belongs_to_many, not flexible later.
Michael Durrant
  • 93,410
  • 97
  • 333
  • 497