以所需格式为 return 参数构建 rails 表单时遇到问题
trouble building a rails form to return paramaters in desired format
我正在尝试创建一个表单,用户可以在其中向他们的帐户添加票证。门票是分层的(青铜、白银、黄金),我在弄清楚如何让表格以我想要的格式输出数据时遇到了一些麻烦。
<%= 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"}
而我希望参数 return 类似于 {"authenticity_token"=>"xxx", "ticket"=>{"tier"=>{'gold => 1, 'silver => 3, 'bronze' => 5 }, "commit"=>"Get Tickets"}
Ticket 模型仅包含属性 user_id、raffle_id 和等级。
您可以尝试如下获取所需的参数格式 -
<%= 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 %>
并在您的 Ticket 模型中添加以下代码
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%>
由于您没有 post 您的模型代码,我不能 100% 确定这会起作用,但请告诉我,我们可以根据需要对其进行调整。这应该会为您提供与我在下面的原始答案相同的结果。
原回答:
您需要使用 HTML 格式构建您想要 returned 的散列。
<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]">
这将 return 您的参数中的哈希值,例如:
"ticket"=>{"tier"=>{"gold" => 1, "silver" => 3, "bronze" => 5 }
您需要确保在您的参数中将此哈希列入白名单,例如:
params.require(:ticket).permit(:tier => [:gold, :sliver, :bronze])
可能有一种方法可以使标准 form_for
格式吐出这个 HTML 但我在处理类似代码时找不到它。如果有人知道该怎么做,我会很感兴趣,但在我的 ERB 文件中构建 HTML 很容易。
我正在尝试创建一个表单,用户可以在其中向他们的帐户添加票证。门票是分层的(青铜、白银、黄金),我在弄清楚如何让表格以我想要的格式输出数据时遇到了一些麻烦。
<%= 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"}
而我希望参数 return 类似于 {"authenticity_token"=>"xxx", "ticket"=>{"tier"=>{'gold => 1, 'silver => 3, 'bronze' => 5 }, "commit"=>"Get Tickets"}
Ticket 模型仅包含属性 user_id、raffle_id 和等级。
您可以尝试如下获取所需的参数格式 -
<%= 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 %>
并在您的 Ticket 模型中添加以下代码
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%>
由于您没有 post 您的模型代码,我不能 100% 确定这会起作用,但请告诉我,我们可以根据需要对其进行调整。这应该会为您提供与我在下面的原始答案相同的结果。
原回答:
您需要使用 HTML 格式构建您想要 returned 的散列。
<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]">
这将 return 您的参数中的哈希值,例如:
"ticket"=>{"tier"=>{"gold" => 1, "silver" => 3, "bronze" => 5 }
您需要确保在您的参数中将此哈希列入白名单,例如:
params.require(:ticket).permit(:tier => [:gold, :sliver, :bronze])
可能有一种方法可以使标准 form_for
格式吐出这个 HTML 但我在处理类似代码时找不到它。如果有人知道该怎么做,我会很感兴趣,但在我的 ERB 文件中构建 HTML 很容易。