问题描述
我正在尝试创建一个表单,用户可以在其中将票证添加到其帐户中。票证是分层的(青铜,银,金),我在弄清楚如何获取表格以所需格式输出数据时遇到麻烦。
<%= form_for(@ticket) do |f|%>
<%=f.label :tier_gold,"Gold" %>: <br>
<%=f.number_field :tier%><br>
<%=f.label :tier_silver,"Silver" %>:<br>
<%=f.number_field :tier%><br>
<%=f.label :tier_bronze,"bronze" %>:<br>
<%=f.number_field :tier%> <br><br>
<%= f.submit "Get Tickets" %>
<%end%>
这将输出参数Parameters: {"authenticity_token"=>"xxx","ticket"=>{"tier"=>"5"},"commit"=>"Get Tickets"}
而我希望参数返回与{"authenticity_token"=>"xxx","ticket"=>{"tier"=>{'gold => 1,'silver => 3,'bronze' => 5 },"commit"=>"Get Tickets"}
相似的内容
票证模型仅包含属性user_id,raffle_id和tier。
解决方法
您可以尝试以下方法获取所需的参数格式-
<%= form_for(@ticket) do |f| %>
<%=f.label :tier_gold,"Gold" %>: <br>
<%=f.number_field :gold%><br>
<%=f.label :tier_silver,"Silver" %>:<br>
<%=f.number_field :silver %><br>
<%=f.label :tier_bronze,"Bronze" %>:<br>
<%=f.number_field :bronze %> <br><br>
<%= f.submit "Get Tickets" %>
<% end %>
并在票证模型中添加以下代码
attr_accessor :gold,:silver,:bronze
,
编辑
我看了这里:https://guides.rubyonrails.org/form_helpers.html#understanding-parameter-naming-conventions 如果您阅读了整个部分,则可以在下面看到我在做什么。这是一个应该起作用的纯Rails解决方案。我将留给我的HTML示例作为参考...
<%= form_for(@ticket) do |f|%>
<%= fields_for(:tier) do |fl|%>
<%=fl.label :gold,"Gold" %>:
<br>
<%=fl.number_field :gold %>
<br>
<%=fl.label :silver,"Silver" %>:
<br>
<%=fl.number_field :silver %>
<br>
<%=fl.label :bronze,"Bronze" %>:
<br>
<%=fl.number_field :bronze %>
<br>
<%end%>
<%end%>
由于您没有发布模型代码,所以我不是100%肯定会成功,但是请告诉我们,我们可以根据需要进行调整。这应该给您与我下面的原始答案相同的结果。
原始答案:
您需要使用HTML格式构建要返回的哈希。
<label for="tier_gold"> Gold: </label><br>
<input type="number_field" name="ticket[tier][gold]">
<br>
<label for="tier_gold"> Silver: </label><br>
<input type="number_field" name="ticket[tier][silver]">
<br>
<label for="tier_gold"> Bronze: </label><br>
<input type="number_field" name="ticket[tier][bronze]">
这将在您的参数中返回哈希值,例如:
"ticket"=>{"tier"=>{"gold" => 1,"silver" => 3,"bronze" => 5 }
您需要确保使用以下参数将哈希值列入白名单:
params.require(:ticket).permit(:tier => [:gold,:sliver,:bronze])
可能有一种使标准form_for
格式吐出此HTML的方法,但是在处理类似代码时我找不到它。如果有人知道该怎么做,我会很感兴趣,但是很容易在我的ERB文件中构建HTML。