用于在rails 5中渲染部分的case语句

时间:2017-10-15 16:18:24

标签: ruby-on-rails ruby ruby-on-rails-5

我正在尝试创建包含动态内容的网页。它是一系列彼此链接的部分,当用户完成时,他们有一个由许多部分组成的完整文档。我以为我可以使用<%= render 'section1' %>或类似的案例声明,每个部分都有自己的case语句,从58的列表中创建5或6个用户选择的部分文档。但是,我不知道#39;知道如何为rails语句提供输入。我可以使用form_for还是有另一种方法来为rails用户输入渲染每个部分?

1 个答案:

答案 0 :(得分:0)

我将从这个建议开始,但我想我会在你回应这个问题时稍微调整一下。 form_choices将是您要包含的每个部分的名称。对于我的变量,我描绘了将包含在简历构建器应用程序中的部分。我有点自学使用这样的复选框集合,所以我的方法可能不是最常规的。有一些方法可以使用rails的内置check_box功能,但在尝试收集包含&#34;的列表时,这些功能对我来说一直存在问题。

要遵循此示例,您需要定义&#34; sections_to_include&#34;您的DynamicPage模型中的列,以便它可以接受数组作为其值:

应用/模型/ 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 %>

现在,show页面遍历您在sections_to_include列中定义的数组。对于每个,它渲染一个名为section_1,section_2等的部分。这将匹配上一个表单复选框中的id号。

应用/视图/ dynamic_page / show.html.erb

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