如何在form_for中使用多个"一对多"嵌套属性

Rus*_*rry 3 ruby ruby-on-rails has-many form-for nested-attributes

鉴于用户有很多信用卡而信用卡有很多地址这一事实,我正在尝试创建一个表格,创建一个用户和信用卡,地址全部一次

相关模型代码:

class User < ActiveRecord::Base
  has_many :credit_cards
  accepts_nested_attributes_for :credit_cards
end

class CreditCard < ActiveRecord::Base
  has_many :addresses
  accepts_nested_attributes_for :addresses
end
Run Code Online (Sandbox Code Playgroud)

控制器代码

def new
  @user = User.new
  @user.credit_cards.build
end
Run Code Online (Sandbox Code Playgroud)

查看代码

=form_for @user, :url => users_path do |u|
  =u.label :first_name, "Name"
  =u.text_field :first_name
    -u.fields_for :credit_cards do |cc|
      =cc.label :name_on_card, "Name on Card"
      =cc.text_field :name_on_card
      -cc.fields_for :address do |address|
        =address.label :address, "Address"
        =address.text_field :address1
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是地址字段没有出现.我尝试添加@user.credit_cards.addresses.build到控制器,但我收到一个undefined method 'build' for nil错误.

Yan*_*nis 5

在你的控制器中,你应该尝试:

cc = @user.credit_cards.build
cc.adrresses.build
Run Code Online (Sandbox Code Playgroud)

要么

@user.credit_cards.build
@user.credit_cards.each{|cc| cc.addresses.build }
Run Code Online (Sandbox Code Playgroud)

@user.credit_cards.addresses.build不起作用因为@user.credit_cards返回一个数组...