0

我的系统中的 ruby​​ 文件中出现语法错误,尽管其他系统中没有这些错误。

错误在代码中,例如:

1)redirect_to :back, alert: exception.message

语法错误在alert

2)load_and_authorize_resource only: [ :update, :destroy ]

语法错误在only

3)render json: @reward.to_json

语法错误在json

像这样有很多错误。

我通过对上述内容进行以下更改来消除这些错误:

1)redirect_to :back, :alert => exception.message

2)load_and_authorize_resource :only => [ :update, :destroy ]

3)render :json => @reward.to_json

似乎错误是由于 ruby​​ 版本引起的,但我不确定正确的原因是什么?

我需要在每个现有项目中进行所有这些更改,这非常痛苦。

这是否意味着项目正在使用旧的 ruby​​ 语法,或者这是否意味着我安装了旧的 ruby​​ 版本?

我的红宝石版本是ruby 1.9.2p180

此外,如果它的 ruby​​ 版本问题比 ruby​​ 升级到最新版本会影响整个项目,如何轻松完成?

更新:

我确认我的 ruby​​ 版本是ruby 1.9.2p180因为以下原因:

D:\ruby_work>ruby -v
  ruby 1.9.2p180 (2011-02-18) [i386-mingw32]


D:\ruby_work>pik list
  187: ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-mingw32]
* 192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

上面的星号(*)表示我当前使用的版本。

确切的错误例如是 redirect_to :back, :alert => exception.message-

, unexpected ':'

更新:

现在我做到了——

D:\ruby_work>pik use 187

D:\ruby_work>pik list
* 187: ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-mingw32]
  192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

D:\ruby_work>ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-mingw32]

错误仍然存​​在。现在我怀疑这真的是一个 ruby​​ 错误,因为更改为旧的 ruby​​ 版本也显示相同的语法错误。唯一的区别是,现在即使从:keyto更改key =>也显示相同的错误。

4

1 回答 1

0

旧版本的 Ruby 不理解 , 的散列符号key: value,只有:key => value1.9+ 可以理解。

我不记得何时添加了新符号,但是,正如您所发现的,允许代码在旧版本上运行的修复方法是使用原始符号。


在 Ruby 1.8.7 中,这是我使用 IRB 时遇到的错误:

irb(main):001:0> foo = {a:'b'}
SyntaxError:编译错误
(irb):1: 语法错误,意外 tSYMBEG,期待 kDO 或 '{' 或 '('
foo = {a:'b'}
          ^
(irb):1: 语法错误,意外的 '}',期待 $end
    来自 (irb):1
irb(main):002:0> foo = {:a => 'b'}
=> {:a=>"b"}
于 2013-02-15T12:35:00.490 回答