Ответ 1
Вы пытаетесь использовать синтаксис хеша 1.9 (key: value
) с 1,8 рубином (:key => value
).
Я пытаюсь получить сайт rails и запускать из github, и я сталкиваюсь с этими ошибками:
WARNING: 'task :t, arg, :needs => [deps]' is deprecated. Please use 'task :t, [args] => [deps]' instead.
at /Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:41 rake aborted! /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:15: odd number list for Hash
user_id: current_user.id,
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:15: syntax error, unexpected ':', expecting '}'
user_id: current_user.id,
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:16: syntax error, unexpected ':', expecting '='
page: request.url
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:17: syntax error, unexpected '}', expecting kEND
})
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:20: odd number list for Hash
page: request.url
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:20: syntax error, unexpected ':', expecting '}'
page: request.url
^ /Users/robertgrzesik/Documents/RubyOnRails/IndieOption/app/helpers/advertisements_helper.rb:21: syntax error, unexpected '}', expecting kEND
})
^
для этого кода:
if ad
if current_user
ad.impressions.create({
user_id: current_user.id,
page: request.url
})
else
ad.impressions.create({
page: request.url
})
end
link_to external_redirect_advertisement_url(ad) do
image_tag ad.image.url(format)
end
else
nil
end
end
Любые идеи?
Вы пытаетесь использовать синтаксис хеша 1.9 (key: value
) с 1,8 рубином (:key => value
).
Какую версию Ruby вы используете? Хэши выглядят корректно с первого взгляда, но синтаксис foo: 'bar'
hash равен только 1.9+. Если вы используете Ruby 1.8.x, вам потребуется обновление.
Ничего себе, выполнение побочных эффектов (создание записи) внутри помощника, вероятно, является одной из последних вещей, которые вы должны сделать. Во всяком случае, предложение рефакторинга (я не вижу необходимости проверять current_user
, нет необходимости в else nil
, Ruby делает это по умолчанию):
if ad
ad.impressions.create(:user => current_user, :page => request.url)
link_to external_redirect_advertisement_url(ad) do
image_tag(ad.image.url(format))
end
end