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
,否则只需{给定符号}
您需要将接受子组的嵌套属性添加到您的竞赛模型中。此方法将创建一个默认的settersub\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