任何人都可以通过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
任何人都可以帮忙吗?
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,它是错误的一面.如果必须从该视图构建证书,则必须列出可用的保管人,可能在选择框中.
这条线
<% f.fields_for :custodian do |custodian| -%>
Run Code Online (Sandbox Code Playgroud)
应该
<%= f.fields_for :custodian do |custodian| -%>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15166 次 |
| 最近记录: |