Ruby on rails Can';t使用rails简单表单嵌套属性将符号转换为整数错误

Ruby on rails Can';t使用rails简单表单嵌套属性将符号转换为整数错误,ruby-on-rails,ruby,simple-form,nested-forms,Ruby On Rails,Ruby,Simple Form,Nested Forms,我看过很多类似的问题,也看过答案,但似乎没有什么对我有帮助,我已经为此工作了一段时间。错误为“无法将符号转换为整数”。我的目标是能够为每个比赛创建多个子组。我只是开始尝试暂时创建一个。这是相关的代码 **更新** 查看 <%= simple_form_for(@race, :url => form_path, :method => form_method, :html => { :class => 'form-horizontal form-compressed

我看过很多类似的问题,也看过答案,但似乎没有什么对我有帮助,我已经为此工作了一段时间。错误为“无法将符号转换为整数”。我的目标是能够为每个比赛创建多个子组。我只是开始尝试暂时创建一个。这是相关的代码

**更新**

查看

<%= simple_form_for(@race, :url => form_path, :method => form_method, :html => { :class =>  
'form-horizontal form-compressed' }) do |f| %>

<fieldset>
<%= f.simple_fields_for :sub_groups do |g| %>
  <%= g.input :name, requred: false %>
  <%= g.collection_radio_buttons :discount_type,
                                 [['dollars', '$'], ['percent', '%']], :first, :last %>
  <%= g.input :discount_amount, :as => :integer, required: false %>
<% end %>
<hr/>
控制器

class RacesController < ApplicationController
  def new
    @race = Race.new
    @sub_groups = @race.sub_groups.build
    @wizard_step = -1
    @wizard_step_name = Race.wizard_step_name_from_id @wizard_step
    @wizard_mode = true
    render :layout => "race_wizard"
  end
def update
  @race = Race.find params[:id]
  @wizard_step = params[:wizard].to_i + 1
  @race.wizard_step = @wizard_step
  @race.update_attributes(params[:race])
end
class RacesController“竞赛向导”
结束
def更新
@race=race.find参数[:id]
@向导\u步骤=参数[:向导]。到\u i+1
@race.wizard\u step=@wizard\u step
@更新_属性(参数[:race])
结束
所以我采纳了答案1的建议,转而在视图中使用:sub_组。现在我有一个新问题,那就是子组字段根本不显示,尽管我用新方法构建了一个子组。
我真的很困惑我如何才能做到这一点。这让我发疯。非常感谢您的帮助。谢谢

fields\u的工作方式是,如果您提供符号,它将检查您的模型是否响应
{gived\u symbol}\u attributes=
。如果这样做,子字段的名称是
{给定符号}\u attributes
,否则只需
{给定符号}

您需要将
接受子组的嵌套属性添加到您的竞赛模型中。此方法将创建一个默认的setter
sub\u groups\u attributes=
,它将为:sub\u groups
创建
字段,以生成具有名称
sub\u groups\u属性的字段

您也可以编写自己的
sub\u groups\u attributes=
方法,但您需要确保知道自己在那里做什么,因为调试可能有点棘手


请注意,如果没有与给定对象关联的子组,
字段到:子组
将不会显示字段-您需要首先在控制器中构建一个。

我们需要更多详细信息。这个错误是什么时候抛出的?我想是在提交之后。如果是,请粘贴控制器代码好吗?另外,将错误本身与堆栈一起粘贴会有很大帮助。我更新了有关控制器操作的更多详细信息。根据第一个答案也改变了一些事情。是的,问题发生在提交之后。但现在我有一个新问题,就是字段根本不显示。当#new method被点击时,我想我正在构建一个sub-groups属性,但可能我做错了什么?好吧,让我们调试一下:为
调用添加
简单字段的正上方。谢谢。这澄清了一些关于{symbol}_属性如何工作的问题,我根据您所说的进行了更改,但我遇到了一个新问题。您将在参数中看到,即使我将字段更改为使用子组,并且添加了接受嵌套属性,并且为子组正确设置了属性访问,参数仍然返回为“子组”,而不是“子组属性”。此外,现在sub_group字段根本不显示。但也许这是我用“新方法”建立他们的一个错误?因此,我最终意识到你的答案是正确的,然后我以为我在建立一个小组,但我只是在“新行动”上这样做。我需要在#编辑操作中执行此操作。所以我只是把它放在。。。race.sub_groups.build基于我的#编辑操作,一切都很好。
class SubGroup < ActiveRecord::Base
  belongs_to :race
  has_many :race_users

  attr_accessible :discount_amount, :discount_type, :display_results, :name
end
Parameters: {"utf8"=>"✓",    
"authenticity_token"=>"VihBL4TDT/Lte4YBji/4fp4XvOri1UgUZ8B33wQuCko=", "race"=>
{"sub_group"=>{"name"=>"dfd", "discount_type"=>"dollars", "discount_amount"=>"2"}},  
"commit"=>"Next", "wizard"=>"2", "id"=>"13-test5"}
class RacesController < ApplicationController
  def new
    @race = Race.new
    @sub_groups = @race.sub_groups.build
    @wizard_step = -1
    @wizard_step_name = Race.wizard_step_name_from_id @wizard_step
    @wizard_mode = true
    render :layout => "race_wizard"
  end
def update
  @race = Race.find params[:id]
  @wizard_step = params[:wizard].to_i + 1
  @race.wizard_step = @wizard_step
  @race.update_attributes(params[:race])
end