代码之家  ›  专栏  ›  技术社区  ›  Russ Bradberry

我如何在表单\u中使用多个“一对多”嵌套属性

  •  3
  • Russ Bradberry  · 技术社区  · 14 年前

    考虑到一个用户有很多信用卡,一张信用卡有很多地址,我正在尝试创建一个表单,一次创建一个用户和一张带有地址的信用卡

    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
    

    控制器代码

    def new
      @user = User.new
      @user.credit_cards.build
    end
    

    =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
    

    所以我遇到的问题是地址字段没有显示。我试着添加 @user.credit_cards.addresses.build 但我得到一个 undefined method 'build' for nil 错误。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Yannis    14 年前

    在控制器中,您应该尝试:

    cc = @user.credit_cards.build
    cc.adrresses.build
    

    @user.credit_cards.build
    @user.credit_cards.each{|cc| cc.addresses.build }
    

    @user.credit_cards.addresses.build @user.credit_cards 返回一个数组