Ruby on rails 构建rails表单以返回所需格式的参数时遇到问题

Ruby on rails 构建rails表单以返回所需格式的参数时遇到问题,ruby-on-rails,ruby,form-for,Ruby On Rails,Ruby,Form For,我正在尝试创建一个表单,用户可以在其中向其帐户添加票据。票证是分层的(铜、银、金),我在弄清楚如何让表单以我想要的格式输出数据时遇到了一些麻烦 <%= form_for(@ticket) do |f|%> <%=f.label :tier_gold, "Gold" %>: <br> <%=f.number_field :tier%><br> <%=f

我正在尝试创建一个表单,用户可以在其中向其帐户添加票据。票证是分层的(铜、银、金),我在弄清楚如何让表单以我想要的格式输出数据时遇到了一些麻烦

    <%= 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%>







这将输出params
参数:{“authenticity\u token”=>“xxx”,“ticket”=>{“tier”=>“5”},“commit”=>“Get Tickets”}

然而,我希望参数返回类似以下内容的内容:
{“authenticity_token”=>“xxx”,“ticket”=>{“tier”=>{'gold=>1,'silver=>3,'brown'=>5},“commit”=>“Get Tickets”}


票证模型仅包含属性user\u id、raffle\u 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 %>

您可以按以下方式尝试获取所需的参数格式-

<%= 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 %>
编辑

我看这里: 如果您阅读了整个部分,您可以看到我在下面做什么。这是一个纯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%>
您需要确保在参数中使用以下内容将此哈希列为白名单:

params.require(:ticket).permit(:tier => [:gold, :sliver, :bronze])
可能有一种方法可以让标准的格式的表单_吐出这个HTML,但我在处理类似的代码时找不到它。如果有人知道如何做,我会感兴趣,但在我的ERB文件中构建HTML很容易。

编辑

我看这里: 如果您阅读了整个部分,您可以看到我在下面做什么。这是一个纯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%>
您需要确保在参数中使用以下内容将此哈希列为白名单:

params.require(:ticket).permit(:tier => [:gold, :sliver, :bronze])

可能有一种方法可以让标准的格式的form_吐出这个HTML,但我在处理类似的代码时找不到它。如果有人知道如何做,我会感兴趣,但只需在我的ERB文件中构建HTML就很容易了。

'undefined method'gold'用于#'ticket类的唯一属性是user_id,抽奖id和tierI think then通过添加属性访问器,票证也可以访问黄金、白银和青铜。
attr\u访问器:黄金、白银、青铜
“未定义的方法”“黄金”用于“票证”类的唯一属性是用户id、抽奖id,tierI think然后通过添加属性访问器,票证可以访问黄金、白银和青铜青铜也一样。
attr\u accessor:gold,:silver,:brown
请发布@ticket的模型和控制器代码。您正在尝试获取散列作为返回值。您将需要按照
的思路生成HTML。您的表单代码将比您的表单代码复杂一些。请发布模型并继续@ticket的troller代码。您正在尝试获取散列作为返回值。您需要按照
的思路生成HTML。您的表单代码将比您的表单代码复杂一些。非常感谢!我在我的tickets模型中添加了attr\u访问器(:brown,:silver,:gold)它开始工作了,但您的解决方案也是一种非常干净的处理方法。如果您有一个返回各种级别的方法,比如
ticket.levels
,它返回一个级别数组,即
[:brown,:silver,:gold]
你可以用一个循环来压缩它,这个循环只有一个条目,可以构建循环中的每个表单元素。如果你只想拥有这三个元素,我就不麻烦了。但是如果你预见到一个列表可能会扩展,你可以使用这个想法,然后在任何时候添加到
ticket.levels返回的数组中方法它将自动生成所需的表单字段。非常感谢!我在我的票证模型中添加了attr_访问器(:brown,:silver,:gold)它开始工作了,但您的解决方案也是一种非常干净的处理方法。如果您有一个返回各种级别的方法,比如
ticket.levels
,它返回一个级别数组,即
[:brown,:silver,:gold]
你可以用一个循环来压缩它,这个循环只有一个条目,可以构建循环中的每个表单元素。如果你只想拥有这三个元素,我就不麻烦了。但是如果你预见到一个列表可能会扩展,你可以使用这个想法,然后在任何时候添加到
ticket.levels返回的数组中方法,它将自动生成所需的表单字段。