为表单构建嵌套资源

时间:2014-09-26 02:43:47

标签: ruby-on-rails-4 associations nested-forms nested-resources

我有一个类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”。

0 个答案:

没有答案