Rails多态嵌套属性

问题描述:

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

多态模型中使用的多态型

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 

class SeoMapping < ActiveRecord::Base 
    belongs_to :mappingtable, :polymorphic => true 
    attr_accessible :seo_url 
    validates :seo_url, :presence => true, :uniqueness => true 
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元素。如果我为该字段注释掉accep_nested_attributes_,然后显示。你能看到我要去哪里吗?

TY

+1

可能是一个愚蠢的问题,但这是你正在谈论的创建或编辑操作?如果是创建,你是否在控制器中调用@ page.build_seo_mapping或其他东西?如果你使用has_one,也可能是不相关的,通常你想使用单数名词,所以'has_one:seo_mapping'而不是'mappings'。 –

+0

@彼得 - 我认为你在钱上。 @李,你需要“建立”这种关联或什么都不会出现。绝对要注意你的单数/复数命名。 Rails约定将是'has_many:seo_mappings'或'has_one:seo_mapping'。 –

+0

是的,这是我需要创建的版本。可以将我的头靠在墙上!谢谢彼得 – Lee

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

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