使用rails simple_form嵌套属性无法将符号转换为整数错误

时间:2013-12-05 08:08:07

标签: ruby-on-rails ruby simple-form nested-forms

我看过许多类似的问题,看了看答案,但似乎没有什么能帮到我,而且我已经有一段时间了。错误是“无法将符号转换为整数”。我的目标是能够为每个种族创建多个子组。我刚开始尝试暂时创建一个。这是相关的代码......

** 更新 **

查看

<%= 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 Race < ActiveRecord::Base
has_many :sub_groups
accepts_nested_attributes_for :sub_groups
attr_accessible :sub_groups_attributes

** SUB_GROUP模型**

class SubGroup < ActiveRecord::Base
  belongs_to :race
  has_many :race_users

  attr_accessible :discount_amount, :discount_type, :display_results, :name
end

PARAMS 我的代码更新后......

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"}

CONTROLLER

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

所以我接受了答案1的建议,并在视图中切换到使用:sub_groups。现在我遇到了一个新问题,即子组域字段根本没有出现,尽管我在#new方法中构建了一个sub_groups事件。 我真的很难过如何实现这一目标。这让我疯狂。任何帮助深表感谢。谢谢!

1 个答案:

答案 0 :(得分:1)

fields_for的工作方式是,如果您提供符号,则会检查您的模型是否响应{given_symbol}_attributes=。如果是,则子字段的名称为{given symbol}_attributes,否则为{given_symbol}

您需要将accepts_nested_attributes_for :sub_groups添加到Race模型中。此方法将创建默认的设置器sub_groups_attributes=,这将使fields_for :sub_groups生成名为sub_groups_attributes的字段。

您也可以编写自己的sub_groups_attributes=方法,但是需要确保知道自己在做什么,因为调试可能有点棘手。

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