Ruby on rails Rails 3中的嵌套属性

Ruby on rails Rails 3中的嵌套属性,ruby-on-rails,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 类证书 “正在工作……”

有人能带我浏览一下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
class CertificateController
我的看法是:

<% 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 -%>
{:action=>'testing'})do | f |-%%>


“正在工作……”
现在,出于某种原因,在我的控制器的第4行:
@certificate.保管人.build

我得到这个错误:
未定义nil:NilClass的方法“build”


有谁能帮忙吗?

有一个属于你的,应该是

@certificate.build_custodian

接受嵌套的属性在一对多关系中应位于一方

class Custodian < ActiveRecord::Base
  has_many :certificates
  accepts_nested_attributes_for :certificates
end
class托管人
所以,在你看来,不应该有字段:保管人,它在错误的一边。如果必须从该视图生成证书,则必须列出可用的保管人,可能在选择框中。

此行

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

应该是

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


谢谢
guitsaru
它很管用。但是,我的观点根本不是为
部分呈现
字段。表单的其余部分已正确呈现。谢谢
Pejic
,这正是我想要实现的。但我计划使用Ajax创建一个自动完成字段,而不是选择框。但就目前而言,我感兴趣的是按照您描述的方式完成这项工作。我可以创建一个新的实例变量,列出保管人,并显示一个选择框,但如何返回到模型中保存关联?使用ID/名称选项对填充选择框。这是一个很好的指南,可以帮助你建立并运行基本的表单。要执行自动完成,您需要构建JSON,以便它将唯一的内容传递给保管人控制器,如ID或名称(如果名称是唯一的)。