我正在构建一个包含html表的页面,用户可以在表格标题中选择名称,也可以选择表格行中的内容。
用户将信息输入到表单中,该表单将被解析为哈希并保存到数据库中。
以下是:key
将成为哈希(表头文本)的键的示例,:value
将是哈希值(表列内容)中的值。
<%= form_for([@page]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_field :key1 %>
<%= f.text_field :value1 %>
<%= f.text_field :key2 %>
<%= f.text_field :value2 %>
<%= f.text_field :key3 %>
<%= f.text_field :value3 %>
<%= f.text_field :key4 %>
<%= f.text_field :value4 %>
<%= f.submit "Save" %>
<% end %>
我可以创建一个与has_many
数据库具有page
关联的新数据库表,并将信息存储在该表中。然后,当我需要渲染视图时,可以将该数据重建为哈希值。
但是,如果我可以将整个哈希值保存到page
数据库的列中,那么每次有人访问该页面时,我都不必重建哈希值。
我正努力想出如何在form_for
中做到这一点。
第一个问题是它需要key
表中的value
和page
列。一个简单的修复方法是将所有输入更改为<%= f.text_field :html_table %>
(html_table
表中的page
列)。但后来它无法区分哈希中的键和值。我也没有办法告诉它将信息放在一个哈希值中,然后存储到page
表的html_table
列中。
不确定这是否是可能的事情,但在我继续构建has_many
关联表并以此方式进行设置之前,不要问它。
答案 0 :(得分:0)
我对你的问题感到困惑。
你不能在你的控制器动作中构建这样的哈希吗?
html_table = {
params[:key1] => params[:value1],
params[:key2] => params[:value2],
params[:key3] => params[:value3],
params[:key4] => params[:value4]
}
然后将其保存到@page.html_table
属性。
编辑:
在这种情况下,表单不是关于特定对象的属性。因此,您应该使用form_tag(Link)而不是使用form_for(Link)。
示例:
<%= form_tag "/pages_controller/build_html_table" do %>
<%= text_field_tag "key1" %>
<%= text_field_tag "value1" %>
<%= submit_tag "Save" %>
<% end %>