Rails中的嵌套属性3

Jas*_*ngh 5 ruby-on-rails

任何人都可以通过Rails 3中的嵌套属性来引导我吗?

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

证书型号:

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

  accepts_nested_attributes_for :custodian, :shareholder, :issuer 
end
Run Code Online (Sandbox Code Playgroud)

证书控制器:

class CertificateController < ApplicationController
  def issue
    @certificate = Certificate.new
    @certificate.custodian.build
  end
end
Run Code Online (Sandbox Code Playgroud)

我的看法:

<% 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 -%>
Run Code Online (Sandbox Code Playgroud)

现在,出于某种原因,在第4行的控制器中: @certificate.custodian.build

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

任何人都可以帮忙吗?

gui*_*aru 9

使用belongs_to,它应该是

@certificate.build_custodian
Run Code Online (Sandbox Code Playgroud)


Srd*_*jic 7

accepts_nested_attributes_for应该在一对多关系中站在一边.

class Custodian < ActiveRecord::Base
  has_many :certificates
  accepts_nested_attributes_for :certificates
end
Run Code Online (Sandbox Code Playgroud)

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


kgt*_*eat 6

这条线

<% f.fields_for :custodian do |custodian| -%>
Run Code Online (Sandbox Code Playgroud)

应该

<%= f.fields_for :custodian do |custodian| -%>
Run Code Online (Sandbox Code Playgroud)