2011-02-01 132 views
5

任何人都可以請我通過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

任何一個可以請幫助?

回答

7

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

9

隨着belongs_to的,它應該是

@certificate.build_custodian 
+1

謝謝`guitsaru`奏效。但是,我的觀點並不是渲染`fields_for`部分。其餘的表格正在被正確渲染。 – 2011-02-01 21:08:57

6

此行

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

應該

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