Rails 3中的嵌套属性

问题描述:

任何人都可以请我通过Rails 3中的嵌套属性?Rails 3中的嵌套属性

我有两个型号:证书和托管人,相关如下:

证书型号:

class Certificate < ActiveRecord::Base 
    belongs_to :shareholder 
    belongs_to :custodian 
    belongs_to :issuer 

    accepts_nested_attributes_for :custodian, :shareholder, :issuer 
end 

证书控制器:

class CertificateController < ApplicationController 
    def issue 
    @certificate = Certificate.new 
    @certificate.custodian.build 
    end 
end 

笔者认为:

<% form_for(:certificate, :url => {:action => 'testing'}) do |f| -%> 

<div id="error"> 
    <%= f.error_messages %> 
</div> 

    <%= f.label :number, "Certificate Number" %> 
    <%= f.text_field :number %> <br/> 

    <%= f.label :num_of_shares, "Number Of Shares" %> 
    <%= f.text_field :num_of_shares %> <br/> 

    <% f.fields_for :custodian do |custodian| -%> 
     <%= custodian.label :name, "Custodian Name" %> 
     <%= custodian.text_field :name %> 
    <% end -%> 

    <%= f.submit "Issue Certificate", :disable_with => 'Working....' %> 

<% end -%> 

现在,出于某种原因,在我的控制器上线4:@certificate.custodian.build

我得到这个错误:undefined method 'build' for nil:NilClass

任何一个可以请帮助?

accepts_nested_attributes_for应该去中的一个侧面在一个一对多的关系。

class Custodian < ActiveRecord::Base 
    has_many :certificates 
    accepts_nested_attributes_for :certificates 
end 

所以,在你看来,应该没有fields_for:custodian,它是错误的一面。如果您必须从该视图创建证书,则必须列出可用的保管人,可能在选择框中。

+0

感谢`Pejic`多数民众赞成正是我想要实现的。但我不打算选择框,我打算使用Ajax创建自动填充字段。但现在,我有兴趣按照您所描述的方式完成这项工作。 – 2011-02-01 21:38:54

随着belongs_to的,它应该是

@certificate.build_custodian 
+1

谢谢`guitsaru`奏效。但是,我的观点并不是渲染`fields_for`部分。其余的表格正在被正确渲染。 – 2011-02-01 21:08:57

此行

<% f.fields_for :custodian do |custodian| -%> 

应该

<%= f.fields_for :custodian do |custodian| -%>