Michael Barinek wrote:> Dr Nic wrote: >> >> Your memberships table would need a boolean ''captain'' field, which is >> set to true for the user,club combination as appropriate > > > is memberships similar to teams_users?Yep. Same columns (plus the captain column), with a better name. -- Posted via http://www.ruby-forum.com/.
the below...
class User < ActiveRecord::Base
  has_and_belongs_to_many :teams
class Team < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_one :captain, :class_name => ''User''
produces the error...
Mysql::Error: Unknown column ''users.team_id'' in
''where clause'': SELECT *
FROM users WHERE (users.team_id = 1)  LIMIT 1
i realize the error - and my current solution is to add user_id to 
team...
then i have...
class Team < ActiveRecord::Base
  has_and_belongs_to_many :users
  def captain
    User.find(user_id)
  end
although the above solution seems awkward - is there a better way to 
accomplish the above?
-- 
Posted via http://www.ruby-forum.com/.
class User < ActiveRecord::Base
  has_many :memberships
  has_many :teams, :through => :memberships
class Team < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_one :captain, :class_name => ''User'', :conditions
=>
    [''memberships.captain = ?'', true], :through =>
:memberships
end
class Membership < ActiveRecord::Base
end
I haven''t run this, but it looks nice.
-- 
Posted via http://www.ruby-forum.com/.
Your memberships table would need a boolean ''captain'' field, which is set to true for the user,club combination as appropriate -- Posted via http://www.ruby-forum.com/.
Dr Nic wrote:> > Your memberships table would need a boolean ''captain'' field, which is > set to true for the user,club combination as appropriateis memberships similar to teams_users? -- Posted via http://www.ruby-forum.com/.
last question... so i still have a problem with select boxes and the controller... class Team < ActiveRecord::Base has_many :memberships has_many :users, :through => :memberships class User < ActiveRecord::Base has_many :memberships has_many :teams, :through => :memberships class Membership < ActiveRecord::Base belongs_to :user belongs_to :team def create @team = Team.new(params[:team]) NoMethodError in TeamController#create undefined method `user_ids='' for #<Team:0x2789500> so i looked - user_ids isn''t there - just membership_ids... -- Posted via http://www.ruby-forum.com/.
i solved the above using the below...
def create
  @team = Team.new(params[:team])
  if @team.save
    flash[:notice] = ''Team was successfully created.''
    Membership.new(:user => @session[''user''], :team =>
@team,
:is_the_captain => true).save
    User.find(params[:membership][:user_ids]).each do |user|
      Membership.new(:user => user, :team => @team).save
    end
still seems strange...
thoughts/comments?
-- 
Posted via http://www.ruby-forum.com/.
User.find(params[:membership][:user_ids]).each do |user|
      Membership.new(:user => user, :team => @team).save
    end
I don''t get why you''re doing this. If you''re creating
a new Team, then
the creator will be the first and only member at that time.
-- 
Posted via http://www.ruby-forum.com/.
what if they don''t select their-self?
here is the view...
<% @selected = @team.users.collect { |v| v.id.to_i } %>
<select name="membership[user_ids][]"
multiple="multiple">
  <%= options_from_collection_for_select(@users, "id",
"login",
@selected) %>
and the db...
create table memberships (
  id 			    int(10) unsigned not null auto_increment,
  team_id 			int(10) unsigned not null,
  user_id 			int(10) unsigned not null,
  is_the_captain    tinyint(1) not null default ''0'',
  primary key (id),
  unique (team_id, user_id),
  foreign key (team_id) references teams(id),
  foreign key (user_id) references users(id)
) engine=innodb default charset=latin1;
-- 
Posted via http://www.ruby-forum.com/.