通过在Rails应用程序中建立/创建属性的多对多

时间:2012-02-24 14:27:16

标签: ruby-on-rails ruby-on-rails-3

以下类相互关联(没有教程的第一个rails应用程序):

class Team < ActiveRecord::Base
  has_many :team_users, :class_name => "TeamUser"
  has_many :users, :through => :team_users
end

class TeamUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :team
end

class User < ActiveRecord::Base
  has_many :team_users, :class_name => "TeamUser"
  has_many :teams, :through => :team_users
end

如果我有用户属性,则在尝试执行以下操作时:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true)

Captain和Owner是TeamUser类的属性。执行命令我得到以下内容:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true)
ActiveRecord::UnknownAttributeError: unknown attribute: captain
...
from -e:1:in `load'
from -e:1:in `<main>'

如果我收到用户,请创建团队,然后创建teamuser all works。我很困惑,已经搜索过但找不到任何东西。

感谢。

1 个答案:

答案 0 :(得分:0)

u.teams指的是Team个实例。使用此命令可以构建Team个实例,因此不会识别机长和所有者是因为它们是TeamUser而非用户的属性。 您应该分两步完成:

team = Team.create
team_user = u.team_users.build(:team_id => team.id)

当然,如果您在team_user上遇到验证错误,则可能需要根据您的应用程序销毁您的团队。