new_hash = {:simon => "Talek", :lorem => "Ipsum"}
可以替换为
new_hash = {simon: "Talek", lorem: "Ipsum"}
是否还有一种较短的写作方式
:on => :collection
应用相同的逻辑会引发错误:
on: :collection
更新以提供更多信息:
在我的routes.rb中:
get 'detail', { on: :member }
不起作用。
也没有get 'detail', on: :member
错误:
Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23:
syntax error, unexpected ':'
get 'detail', { on: :member }
或
Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23:
syntax error, unexpected ':'
get 'detail', on: :member
答案 0 :(得分:3)
这对我来说很好用:
def get(*args) p *args end
get 'detail', on: :member
# "detail"
# { :on => :member }
RUBY_ENGINE
# => jruby
JRUBY_VERSION
# => 1.6.6
编辑:既然您提供了错误消息,看起来您没有运行Ruby 1.9。新的哈希语法是在Ruby 1.9中引入的,它在旧版本中不起作用。您需要确保运行Ruby 1.9,或者通过验证您正在运行正确的Ruby实现(例如,YARV支持1.9,MRI不支持),或者,如果您正在运行支持多语言版本的Ruby实现(例如JRuby)你传递了正确的命令行标志(例如jruby --1.9
)。
答案 1 :(得分:1)
正如其他人所提到的,你需要使用1.9来使这个语法工作。将环境变量JRUBY_OPTS
设置为--1.9
将确保您使用正确的ruby版本。
答案 2 :(得分:-1)
Bare action: 'edit'
和:action => 'edit'
都是语法错误。您只能传递没有方括号的哈希作为方法的最后一个参数。在所有其他情况下,请使用{action: 'edit'}
。
为此,您必须运行ruby 1.9 +:get 'detail', { on: :member }