2012-08-26 268 views
0

我有一個多態模型,並希望有一個嵌套的表單使用此模型。我沒有得到任何錯誤,但表單不顯示嵌套字段。這裏是我的模型和精簡形式: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

回答

1

可能是一個愚蠢的問題,但是這是你在談論的創建或編輯動作?如果是創建,你是否在控制器中調用@ page.build_seo_mapping或其他東西?

另外(可能無關)如果你使用has_one,通常你想使用單數名詞,所以has_one:seo_mapping而不是映射。