2017-10-15 47 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列是否正在接收下一个视图中所需的数组类型。 –