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?
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.
Your memberships table would need a boolean ‘captain’ field, which is
set to true for the user,club combination as appropriate
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?
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…
Michael B. 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.
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?
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.
what if they don’t select their-self?
here is the view…
<% @selected = @team.users.collect { |v| v.id.to_i } %>
<%= 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;