Новый синтаксис хэша Ruby 1.9 - PullRequest
4 голосов
/ 02 марта 2012
new_hash = {:simon => "Talek", :lorem => "Ipsum"}

можно заменить на

new_hash = {simon: "Talek", lorem: "Ipsum"}

Существует также более короткий способ записи

:on => :collection

При применении той же логики возникает ошибка:

on: :collection

Обновление, чтобы предоставить больше информации:

В моем маршрутах.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

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

Это прекрасно работает для меня:

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 голос
/ 03 марта 2012

Как уже упоминалось, вам нужно использовать 1.9, чтобы этот синтаксис работал.Установка переменной среды JRUBY_OPTS в --1.9 обеспечит правильную версию ruby.

0 голосов
/ 02 марта 2012

Bare action: 'edit' и :action => 'edit' являются синтаксическими ошибками.В качестве последнего аргумента метода вы можете передавать только хэши без скобок .Во всех других ситуациях используйте {action: 'edit'}.

Чтобы это работало, вы должны запустить ruby ​​1.9+: get 'detail', { on: :member }

...