Rails多态嵌套属性

时间:2012-08-26 12:34:15

标签: ruby-on-rails ruby-on-rails-3 polymorphic-associations

我有一个多态模型,想要一个嵌套的表单使用这个模型。我没有错误,但表单没有显示嵌套字段。这是我的模型和剥离形式:

多态模型

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_,则显示。你能看出我错在哪里吗?

TY

1 个答案:

答案 0 :(得分:1)

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

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