如何在同一个模型中执行has_many和has_one关联?

Igo*_*ins 27 ruby-on-rails associations ruby-on-rails-4

我需要在同一个模型中做两个关联.哪里:

团队 has_many 用户 现在,我想要那个团队 has_one 负责人

这个"领导者"将是一个用户

我试图使用,has_one throught但我认为这种关联不起作用.

Leader.rb

class Leader < ActiveRecord::Base
belongs_to :user
belongs_to :team
Run Code Online (Sandbox Code Playgroud)

Team.rb

class Team < ActiveRecord::Base
has_one :user, through: :leader
end
Run Code Online (Sandbox Code Playgroud)

User.rb

class User < ActiveRecord::Base

belongs_to :team
has_one :captain

end
Run Code Online (Sandbox Code Playgroud)

并在第27行附近得到以下错误:

NoMethodError in TeamsController#create

26 def create

**27 @team = current_user.teams.create(team_params)**

28 @team.save

29 respond_with(@team)

30 current_user.update(team_id: @team.id)
Run Code Online (Sandbox Code Playgroud)

Lua*_*n D 24

在这种情况下,我认为你需要2个模型就足够了

1).用户模型

class User < ActiveRecord::Base
   belongs_to :team
end
Run Code Online (Sandbox Code Playgroud)

2).团队模型

 class Team < ActiveRecord::Base
   has_many :users
   belongs_to :leader, class_name: 'User', foreign_key: :leader_id
 end
Run Code Online (Sandbox Code Playgroud)


usm*_*ali 5

如何boolean在用户表中设置一个名为leader. 然后你的协会可以变成:

class Team < ActiveRecord::Base   
  has_many :users   
  has_one :leader, class_name: 'User', -> { where leader: true }
end
Run Code Online (Sandbox Code Playgroud)