2017-10-15 43 views
1

我正嘗試使用動態內容創建頁面。這是一系列相互鏈接的部分,當用戶完成時,他們有一個由許多部分組成的完整文檔。我在想我可以用<%= render 'section1' %>之類的case語句,每個部分都有自己的case語句,用來從58個列表中創建5或6個用戶選擇的部分文件。但是,我不知道如何提供案例陳述的輸入。我可以使用form_for還是有另一種方式來給rails用戶輸入渲染每個部分?用於在rails中渲染部分的案例聲明5

回答

0

我會從這個建議開始,但我想我會稍微調整這一點,因爲您對此有所反應。 form_choices將是您想要包含的每個部分的名稱。對於我的變量,我繪製了將包含在簡歷構建器應用程序中的部分。我一直在教自己使用這樣的複選框集合,所以我的方法可能不是最傳統的。有許多方法可以使用rail的內置check_box功能,但在嘗試收集「包含列表」時,這些問題對我來說是有問題的。

以此爲榜樣,你需要在你的DynamicPage模型中定義的「sections_to_include」列,以便它可以接受一個數組作爲它的值:

應用程序/模型/ dynamic_page.rb

serialize :sections_to_include 

dynamic_page_controller.rb

def new 
    @dynamic_page = DynamicPage.new 
end 

def create 
    @dynamic_page = DynamicPage.new(dynamic_page_params) 
    if @dynamic_page.save 
     redirect_to dynamic_page_path(@dynamic_page) 
    else 
     render 'new' 
    end 
end 

private 

    def dynamic_page_params 
     params.require(:dynamic_page).permit(sections_to_include: []) 
    end 

應用程序/視圖/ dynamic_page/new.html.erb

<% form_choices = ["Name", "Contact Info", "Objective", "Work History", "Other Experience", "Skills", "References"] %> 

<%= form_for @dynamic_page do %> 
    <% form_choices.each_with_index do |c, index| %> 
     <input name="dynamic_page[sections_to_include]" type="checkbox" value="<%= index %>" /> 
     <p><%= c %></p> 
    <% end %> 

    <%= submit "Build this Page" %> 
<% end %> 

現在通過您在sections_to_include列定義的數組顯示頁面迭代。對於每一個,它呈現一個名爲section_1,section_2等的部分。這將與前一個表單的複選框匹配。

應用程序/視圖/ dynamic_page/show.html.erb

<% @dynamic_page.sections_to_include.each do |section_id| %> 
    <%= render :partial => "/dynamic_page/section_#{section_id}" %> 
<% end %> 
+0

按提交以這種方式,導軌是要尋找一個崗位路線。如果我沒有更新模型,控制器應該如何處理這些信息?它應該如何告訴視圖來呈現部分必要的? – Martin

+0

現在我再考慮一下你的問題,你可能應該更新一個模型。我添加了可以在控制器和第二個視圖中使用的代碼。這些參數可能並不完全符合我的想法,因爲我沒有測試過。您需要執行一些調試以查看section_to_include列是否正在接收下一個視圖中所需的數組類型。 –