0

我有一个多态模型,并希望有一个嵌套表单使用这个模型。我没有收到任何错误,但表单未显示嵌套字段。这是我的模型和精简形式:

多态模型

class SeoMapping < ActiveRecord::Base
  belongs_to :mappingtable, :polymorphic => true
  attr_accessible :seo_url
  validates :seo_url, :presence => true, :uniqueness => true   
end

使用多态模型的页面模型

class Page < ActiveRecord::Base
  has_one :seo_mappings, :as => :mappingtable, :dependent => :destroy
  accepts_nested_attributes_for :seo_mappings 
  attr_accessible :content, :h1, :meta_description, :title, :seo_mappings_attributes
  .........
end

现在剥离形式

<%= form_for(@page) do |f| %>
  <% if @page.errors.any? %>
    .......
  <% end %>

  <div class="field">
    <%= f.fields_for :seo_mappings do |builder| %>
      <%= builder.label :seo_url %><br />
      <%= builder.text_field :seo_url %>
    <% end %>
  </div>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  .........
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我不明白为什么它不显示 fields_for 元素。如果我注释掉accepts_nested_attributes_for 该字段,然后显示。你能看出我哪里出错了吗?

4

1 回答 1

1

可能是一个愚蠢的问题,但这是您正在谈论的创建或编辑操作吗?如果它是创建的,你有没有在控制器中调用@page.build_seo_mapping 或其他东西?

另外(可能不相关)如果您使用 has_one,通常您想使用单数名词,所以 has_one :seo_mapping 而不是映射。

于 2012-08-26T15:58:03.467 回答