我有一个基于Ruby后端构建的应用程序(目前尚未使用Rails,但目前正在使用Sinatra)。
在应用程序中,我有一个用于向人们添加订阅的表单。每个订阅都可以是试用版(在这种情况下,它可以拥有它自己的试用开始日期和结束日期),也可以通过不同方式邮寄出来(即我们可以设置邮寄偏好,以便他们如何邮寄)。
我的表格如下:
我想知道的是如何将每个输入与订阅相关联?即每行的所有输入必须相互链接
这是我的HTML(不知道还有什么是必需的,还没有真正的后端。):
<tr>
<th style="vertical-align: top;">Subscriptions</th>
<td>
<ul id="subscription-select-list">
<li class="subscription-select-box">
<select name="person[subscriptions][]">
<option value="">Select a subscription</option>
<% @products.each do |product| %>
<optgroup label="<%= product.name %>">
<% product.subscriptions.sort_by{|subscription| subscription.name }.each do |subscription| %>
<option value="<%= subscription.id %>"><%= subscription.name %></option>
<% end %>
</optgroup>
<% end %>
</select>
<select name="person[mailing]" id="mailing">
<option value="">Mailing Preference</option>
<option value="Cc">Cc</option>
<option value="BCc">BCc</option>
<option value="Google Groups">Google Groups</option>
</select>
<input type="text" id="trial-start" class="datepicker" name="person[trial][start]" placeholder="Trial Start (DD.MM.YYYY)">
<input type="text" id="trial-end" class="datepicker" name="person[trial][end]" placeholder="Trial End (DD.MM.YYYY)">
<img src="/img/add_circle.png" alt="Circular add button" class="add-button">
<img src="/img/remove_circle.png" alt="Circular add button" class="remove-button" style="display: none;">
</li>
</ul>
</td>
我已将第一个选择输入的名称设置为name="person[subscriptions][]"
我认为我可以使用它将每行加载到哈希中,如:
{subscription_id: 1, mailing_preference: 'BCc', trial_start: '', trial_end: ''}
这些会加载到数组中,例如[{...}, {...}, ...]
,可以params[:person][:subscriptions]
但我不确定该怎么做,或者这是否是最好的方法。
答案 0 :(得分:0)
好的,所以我找到了解决方案!
正如我在我的问题中所假设的,它确实涉及name属性。但是,它需要稍微复杂的命名 - 非常感谢来自超现实侦探博客的this blog post教我如何完成!
如果我按如下方式更改名称属性:
订阅选择器:person[subscriptions][][id]
邮寄偏好:person[subscriptions][][mailing]
试用开始:person[subscriptions][][trial][start]
试用期结束:person[subscriptions][][trial][end]
然后它给我一个带有订阅键的params哈希,如"subscriptions"=>[{"name"=>"53", "mailing"=>"Cc", "trial"=>{"start"=>"09/17/2017", "end"=>"09/26/2017"}}, {"name"=>"83", "mailing"=>"BCc", "trial"=>{"start"=>"09/05/2017", "end"=>"09/11/2017"}}, ...]
这正是我所寻找的!
基本上,person[:subscriptions]
会在subscriptions
哈希中创建一个person
密钥。之后的[]
表示subscriptions
键的值应该是一个数组。在[]
中添加更多属性,然后在该数组中创建嵌套哈希。
即。 person[:subscriptions][][:name]
会在{"name"=>"53"}
数组
subscriptions
的哈希值