Ruby on rails 同一模型上的多对多和一对一关联

Ruby on rails 同一模型上的多对多和一对一关联,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我可以在rails控制台中实现这一点,但我可以找出如何实现代码 使用HABTM关联,一个用户可以在多个团队中,一个团队可以有多个用户。 但是一个团队由一个用户拥有,一个用户只能拥有一个团队 如何做到在创建团队时(有效),我也可以关联一对一关系 我对set_user_on_team方法中的代码有问题。它当前生成2条团队记录,第二条具有所有正确的关联,第一条仅将用户作为团队成员 1.9.3p194 :005 > Team.all Team Load (0.2ms) SELECT "teams

我可以在rails控制台中实现这一点,但我可以找出如何实现代码

使用HABTM关联,一个用户可以在多个团队中,一个团队可以有多个用户。 但是一个团队由一个用户拥有,一个用户只能拥有一个团队

如何做到在创建团队时(有效),我也可以关联一对一关系

我对set_user_on_team方法中的代码有问题。它当前生成2条团队记录,第二条具有所有正确的关联,第一条仅将用户作为团队成员

1.9.3p194 :005 > Team.all
Team Load (0.2ms)  SELECT "teams".* FROM "teams" 
=> [#<Team id: 1, name: "username", dept_no: nil, created_at: "2012-07-27 12:19:00", updated_at: "2012-07-27 12:19:00", user_id: nil>, #<Team id: 2, name: "username", dept_no: nil, created_at: "2012-07-27 12:19:00", updated_at: "2012-07-27 12:19:00", user_id: 1>] 
1.9.3p194 :006 > user.teams
Team Load (0.1ms)  SELECT "teams".* FROM "teams" INNER JOIN "teams_users" ON "teams"."id" = "teams_users"."team_id" WHERE "teams_users"."user_id" = 1
=> [#<Team id: 1, name: "username", dept_no: nil, created_at: "2012-07-27 12:19:00", updated_at: "2012-07-27 12:19:00", user_id: nil>, #<Team id: 2, name: "username", dept_no: nil, created_at: "2012-07-27 12:19:00", updated_at: "2012-07-27 12:19:00", user_id: 1>] 
1.9.3p194 :007 > user.team
=> #<Team id: 2, name: "username", dept_no: nil, created_at: "2012-07-27 12:19:00", updated_at: "2012-07-27 12:19:00", user_id: 1> 
Team.rb

class Team < ActiveRecord::Base

  attr_accessible :name
  has_and_belongs_to_many :users
  belongs_to :user

end
class团队
加入团队和拥有团队是两种不同的关系,所以给他们起不同的名字,你会很好:

class Team < ActiveRecord::Base
  has_and_belongs_to_many :users
  belongs_to :owner, :class_name => "User"
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :teams
  has_one :owned_team, :class_name => "Team"
end
class团队“User”
结束
类用户“团队”
结束

我可以看到您的逻辑,但实现这一点不需要is。我已经更新了我的问题,以显示rails控制台中的一个工作示例。你说得对,这是不必要的,但它既提高了可读性,也可以防止一些错误,例如使用
team
作为局部变量,但实际上指的是
self.team
self.team几乎让我做到了这一点,但现在它创建了两个团队记录。我已经用新的代码和解释更新了这个问题,尝试将after_保存切换到after_create,以便只发生一次。添加某些类型的关联将导致记录本身被保存,这是根据Reafter_crate清除双重记录后得出的结论,但仍然会产生一些奇怪的行为user.owned_team返回owned team,但team.owner返回nil您能显示它生成的错误吗?
def set_user_on_team
      self.team = teams.create(:name => 'username' ) 
end
class Team < ActiveRecord::Base

  attr_accessible :name
  has_and_belongs_to_many :users
  belongs_to :user

end
class Team < ActiveRecord::Base
  has_and_belongs_to_many :users
  belongs_to :owner, :class_name => "User"
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :teams
  has_one :owned_team, :class_name => "Team"
end