我正在使用默认的rails scaffold命令生成Rails脚手架。但是在尝试迁移时出现此错误:
syntax error, unexpected tINTEGER, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
t.float :2011-12
要生成支架,我正在使用以下代码:
rails g scaffold Annual_State_Domestic_Product3 Sector:string '2011-12':float '2012-13':float '2013-14':float '2014-15':float '2015-16':float '2016-17':float
Similar answer on stack在此解决方案中非常简单,将其转换为:
t.float :2016-17
像这样:
t.float :'2016-17'
所以我的问题是如何从脚手架命令中将值作为字符串传递,就像您看到的那样,我试图将列名作为字符串传递但什么也没发生。
答案 0 :(得分:0)
这就是我要怎么做
rails g migration AnnualStateDomesticProduct3 Sector:string '2011-12':float '2012-13':float '2013-14':float '2014-15':float '2015-16':float '2016-17':float
在运行rake db:migrate
之前,打开迁移文件timestamp_AnnualStateDomesticProduct3
并编辑各列,使其看起来像t.decimal :'2011-12'
然后运行rake db:migrate
答案 1 :(得分:0)
请尝试这个
rails g scaffold Annual_State_Domestic_Product3 Sector:string :'2011-12':float :'2012-13':float :'2013-14':float
等等。
答案 2 :(得分:0)
运行 rails g scaffold Annual_State_Domestic_Product3扇区:字符串'2011-12':float'2012-13':float'2013-14':float'2014-15':float'2015-16':float'2016-17':float < / p>
之后,转到迁移文件并替换
t.float:2011-12
到
t.float:“ 2011-12”
答案 3 :(得分:0)
ActiveRecord将您的字段名称映射到ruby变量,并且您不允许在变量名称中使用-
,因为它是数学运算符,因此您的字段名称2011-12
将被解释为数学表达式像这样:
2011-12 = 1999
出现unexpected tINTEGER
异常。
为避免这种情况,您可以使用下划线_
代替-
,例如2011_12
:
rails g scaffold Annual_State_Domestic_Product3 Sector:string '2011_12':float '2012_13':float '2013_14':float '2014_15':float '2015_16':float '2016_17':float
答案 4 :(得分:0)
如果您检查与您提到的SO相关的类似问题,那么在第二个答案中,您会很好地解释了当前方法所面临的问题。
要指出一个问题,即使在迁移成功为t.string "2013-14"
之后,您也无法调用2013-14
作为方法,因为ruby不支持以数字开头的方法。
为了防止这些问题,我的建议是在运行迁移时将属性命名为date
或season
。