【问题标题】:fields_for for nested attribute returns nothing嵌套属性的 fields_for 不返回任何内容
【发布时间】:2010-12-18 21:11:41
【问题描述】:

我正在尝试在 Rails 3.0.3 中创建嵌套模型表单。这是我的模型:

class Bird < ActiveRecord::Base
  has_one :taxon, :as => :organism
  accepts_nested_attributes_for :taxon
end

class Taxon < ActiveRecord::Base
  belongs_to :organism, :polymorphic => true
end

这是控制器方法:

def new
  @bird = Bird.new
  @bird.build_taxon
end

这是表格:

New Bird
<% form_for @bird do |f| %>
<p>
    <%= f.label :wingspan %>
    <%= f.text_field :wingspan %>
</p>
<p>
    <%= f.label :body_length %>
    <%= f.text_field :body_length %>
</p>
<% f.fields_for :taxon do |builder| %>
    <%= builder.label :common_name %>
    <%= builder.text_field :common_name %>
    <%= builder.label :genus_name %>
    <%= builder.text_field :genus_name %>
    <%= builder.label :species_name %>
    <%= builder.text_field :species_name %>
<% end %>
<%= f.submit %>
<% end %>

当我运行新方法时,分类单元的字段不显示。在 html 源代码中没有任何提示。我听说如果嵌套模型为零(即如果我忘记在控制器方法中构建它),就会发生这种情况,但它就在那里。我在视图中添加了一些条件代码只是为了确保。

那么,谁会让我在这里拍我的额头?我错过了什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails nested-forms fields-for


    【解决方案1】:

    您使用的是 Rails 3 吗?如果是这样,它应该是:

    <%= form_for @bird do |f| %>
    

    <%= f.fields_for :taxon do |builder| %>
    

    注意等号。

    【讨论】:

    • 奇怪的是,在两个语句中省略 = 会呈现 Bird 字段,但不会呈现 Taxon 字段,因此 form_for 似乎适用于旧语法,但不适用于 @987654327 @(当然是 Rails 3)。
    • 天哪,是的,是 fields_for 行中缺少等号造成的。多么奇怪,它应该是必要的!谢谢!
    • 它仍未渲染的另一个原因是您没有在控制器的 :new 操作中调用“构建”它的关联(您可能已经忽略了)。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多