我有一个类User,它有子类IndividualUser和BusinessUser(通过STI)。 IndividualUser和BusinessUser具有多对多关联,并通过名为Employees的连接表进行链接。
此外,用户可以拥有一个帐户。
我正在尝试设置嵌套表单,并且正在努力创建所需的对象。
我的模特:
class User
has_one :account
end
class IndividualUser < User
has_many :business_users, :through => :employees
has_many :employees
end
class BusinessUser < User
has_many :individual_users, :through => :employees
has_many :employees
end
class Employee < ActiveRecord::Base
belongs_to :business_user
belongs_to :individual_user
end
class Account
belongs_to :user
end
现在,在我的控制器中,我可以为单个用户创建一个新帐户:
# GET /individual_users/new
def new
@individual_user = IndividualUser.new
@individual_user.build_account
end
这很好用。
但是,当我尝试创建business_user,然后是individual_users,然后是每个individual_user的帐户:
# GET /business_users/new
def new
@business_user = BusinessUser.new
@business_user.employees.build()
@business_user.employees.each do |employee|
@individual_user = employee.build_individual_user
@individual_user.build_account
end
end
我收到以下错误:
undefined method `build_account' for nil:NilClass
好像没有创建@individual_user。
我不知道为什么我会收到这个错误。有什么想法吗?
真正奇怪的是,如果我将代码移动到视图中,它似乎可以工作。即在我看来:
<% @business_user.employees.each do |employee| %>
<% employee.individual_user.build_scoot_account %>
<% employee.individual_user.scoot_account.id = 2 %>
<%= employee.individual_user.scoot_account.id %>
<% end %>
显示“2”。