我需要在同一个模型中做两个关联。其中:
小组 has_many
用户
现在,我希望团队 has_one
领导
此“领导者”将是用户
我试图使用has_one throught
,但我认为这种关联不起作用。
Leader.rb
class Leader < ActiveRecord::Base
belongs_to :user
belongs_to :team
Team.rb
class Team < ActiveRecord::Base
has_one :user, through: :leader
end
User.rb
class User < ActiveRecord::Base
belongs_to :team
has_one :captain
end
并在第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)
答案 0 :(得分:22)
在这种情况下,我认为你需要2个模型就足够了
1)。用户模型
class User < ActiveRecord::Base
belongs_to :team
end
2)。团队模型
class Team < ActiveRecord::Base
has_many :users
belongs_to :leader, class_name: 'User', foreign_key: :leader_id
end
答案 1 :(得分:2)
如何在名为boolean
的用户表中设置leader
标志。然后您的关联可以成为:
class Team < ActiveRecord::Base
has_many :users
has_one :leader, class_name: 'User', -> { where leader: true }
end
答案 2 :(得分:2)
团队has_many用户现在,我希望该团队has_one Leader
这个&#34;领导者&#34;将成为用户
使用继承(也称为子类),Leader是用户。
class User < ActiveRecord::Base
belongs_to :team
end
class Leader < User
end
class Team < ActiveRecord::Base
has_many :users
has_one :leader
end
您的用户表也很重要。确保用户的create_table方法中包含t.belongs_to :team
和t.string :type
。请注意,Leader是用户,不需要单独的表,但是您需要允许ActiveRecord记录其类型,以便以后可以返回正确的Model。
参考文献:
inheritance特别需要&#39;单表继承&#39;
belongs_to向下滚动浏览has_one和has_many,这里使用了三种关系。
答案 3 :(得分:1)
current_user.teams.create(team_params)
小组适用于has_many
关联,您需要current_user.create_team(team_params)
答案 4 :(得分:0)
has_one
与user
之间存在team
关联。试试这个:
current_user.create_team(team_params)
此外,您应该从team
到leader
添加适当的反向关联。
class Team < ActiveRecord::Base
belongs_to :leader
has_one :user, through: :leader
end