用于在rails中渲染部分的案例声明5
问题描述:
我正尝试使用动态内容创建页面。这是一系列相互链接的部分,当用户完成时,他们有一个由许多部分组成的完整文档。我在想我可以用<%= render 'section1' %>
之类的case语句,每个部分都有自己的case语句,用来从58个列表中创建5或6个用户选择的部分文件。但是,我不知道如何提供案例陈述的输入。我可以使用form_for
还是有另一种方式来给rails用户输入渲染每个部分?用于在rails中渲染部分的案例声明5
答
我会从这个建议开始,但我想我会稍微调整这一点,因为您对此有所反应。 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 %>
按提交以这种方式,导轨是要寻找一个岗位路线。如果我没有更新模型,控制器应该如何处理这些信息?它应该如何告诉视图来呈现部分必要的? – Martin
现在我再考虑一下你的问题,你可能应该更新一个模型。我添加了可以在控制器和第二个视图中使用的代码。这些参数可能并不完全符合我的想法,因为我没有测试过。您需要执行一些调试以查看section_to_include列是否正在接收下一个视图中所需的数组类型。 –