0

我有問題獲得下面的代碼工作。fields_for has_many通過關係導軌3

class Page < ActiveRecord::Base 
    has_many :page_parts, :through => :page_parts_pages 
    has_many :page_parts_pages 
    accepts_nested_attributes_for :page_parts, :allow_destroy => true 
    accepts_nested_attributes_for :page_parts_pages, :allow_destroy => true 
    end 

    class PagePart < ActiveRecord::Base 
    has_many :page_parts_pages 
    has_many :pages, :through => :page_parts_pages 
    end 

    class PagePartsPage < ActiveRecord::Base 
    belongs_to :page 
    belongs_to :page_part 
    end 

表結構: -

pages 
     id, title 

    pages_parts 
     id, title 

    page_parts_pages 
     id, page_id, page_part_id 

查看代碼

<% page_fragment.each do |k,v| %> 

    <% if v.nil? or v.blank? or v.empty? %> 

     <% parts = f.object.page_parts.build if f.object.page_parts.blank? %> 

     <%= f.fields_for :page_parts, parts do |p| %> 

     <%= render 'page_part_form_field', :f => p %> 

     <% end %> 

     <% else %> 

     <% parts_page = f.object.page_parts_pages.build if f.object.page_parts_pages.blank? %> 

    <%= f.fields_for :page_parts_pages, parts_page do |p| %> 

     <%= render 'page_part_page_form_field', :f => p %> 

    <% end %> 

    <% end %> 

<% end %> 

其實情況是,我要顯示條件的基礎上page_parts和page_parts_pages領域。如果條件滿足,page_parts的其他顯示字段將顯示page_parts_pages的字段。

對於新動作,它的工作效果非常好,但對於編輯動作而言,它無法正確顯示。

任何幫助,高度讚賞。

在此先感謝

回答

0

你在這個形式創造新的page_parts:

parts = f.object.page_parts.build if f.object.page_parts.blank? 
parts_page = f.object.page_parts_pages.build if f.object.page_parts_pages.blank? 

「構建」創建新對象(它不會在數據庫中堅持他們雖然)。所以,難怪它適用於新的,但不適用於編輯。 你可以試試這個:

<% page_fragment.each do |k,v| %> 
    <% if v.blank? %> 
     <%= f.fields_for :page_parts do |p| %> 
     <%= render 'page_part_form_field', :f => p %> 
     <% end %> 
     <% else %> 
    <%= f.fields_for :page_parts_pages do |p| %> 
     <%= render 'page_part_page_form_field', :f => p %> 
    <% end %> 
    <% end %> 
<% end %> 

rails api有forms_for和其他形式的助手相當不錯的文檔。

+0

謝謝@salil你的時間,但使用你的解決方案提出了兩個問題: - 1)表單只發布page_parts_pages的一個實例,而它應該是兩個。 2)它引發了一個錯誤無法批量分配受保護的屬性:page_parts_page,page_part。克服這個錯誤後,應用程序提出「未知屬性page_parts_page」 – vikram

+0

編輯我的答案。我想如果你知道fields_for是什麼,你會找到正確的方式來實現你的表單。 – Salil

+0

我會嘗試編輯的答案。而且,如果你分享一些鏈接,我可以更好地理解這些領域,那對我來說將會非常棒 – vikram