2013-10-01 4 views
0

Я получаю эту ошибку при обработке теста api в моем приложении rails.Rails API- Невозможно преобразовать символ в целое

Ошибка;

can't convert Symbol into Integer 

app/controllers/api/v1/xml/messages_controller.rb:5:in `[]=' 
app/controllers/api/v1/xml/messages_controller.rb:5:in `create' 

и

{"username"=>"[email protected]", 
"password"=>"[FILTERED]", 
"to"=>"256776582036", 
"from"=>"acacia", 
"message"=>"hello acacia", 
"format"=>:xml} 

И я подозреваю, что проблема заключается в параметрах "format" => :xml. Как я могу остановить его?

Контроллер:

def create 
    @user = current_user 
    @message = Message.new(params[:message]) 
    @message.user_id = current_user.id 
    @message.status = 'Queued' 
    if @message.save 
     MessageWorker.perform_async(@message.id, lists, current_user.id) 
     render json: {status: "success", to: @message.count, from: @message.from, 
         balance: @user.balance, message: @message.message, 
         time: @message.created_at} 
    else 
     render status: 400 
    end 
end 

линия 5

@message = Message.new(params[:message])

Цепочка вызовов является

app/controllers/api/v1/xml/messages_controller.rb:5:in `create' 
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action' 
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
activesupport (3.2.13) lib/active_support/callbacks.rb:414:in `_run__645129932408314116__process_action__3356705148777596390__callbacks' 
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback' 
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks' 
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action' 
actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action' 
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action' 
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `block in instrument' 
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument' 
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action' 
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action' 
activerecord (3.2.13) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
newrelic_rpm (3.6.7.159) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:38:in `block in process_action' 
newrelic_rpm (3.6.7.159) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:324:in `perform_action_with_newrelic_trace' 
newrelic_rpm (3.6.7.159) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:37:in `process_action' 
actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `process' 
actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `process' 
actionpack (3.2.13) lib/action_controller/metal.rb:203:in `dispatch' 
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' 
actionpack (3.2.13) lib/action_controller/metal.rb:246:in `block in action' 
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `call' 
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch' 
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:36:in `call' 
journey (1.0.4) lib/journey/router.rb:68:in `block in call' 
journey (1.0.4) lib/journey/router.rb:56:in `each' 
journey (1.0.4) lib/journey/router.rb:56:in `call' 
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call' 
newrelic_rpm (3.6.7.159) lib/new_relic/rack/error_collector.rb:43:in `call' 
newrelic_rpm (3.6.7.159) lib/new_relic/rack/agent_hooks.rb:22:in `call' 
newrelic_rpm (3.6.7.159) lib/new_relic/rack/browser_monitoring.rb:16:in `call' 
warden (1.2.3) lib/warden/manager.rb:35:in `block in call' 
warden (1.2.3) lib/warden/manager.rb:34:in `catch' 
warden (1.2.3) lib/warden/manager.rb:34:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' 
rack (1.4.5) lib/rack/etag.rb:23:in `call' 
rack (1.4.5) lib/rack/conditionalget.rb:35:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call' 
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context' 
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call' 
activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call' 
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' 
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `_run__3057558528737021071__call__666448881149873332__callbacks' 
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback' 
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callbacks' 
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app' 
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call' 
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged' 
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call' 
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call' 
rack (1.4.5) lib/rack/runtime.rb:17:in `call' 
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
rack (1.4.5) lib/rack/lock.rb:15:in `call' 
rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward' 
rack-cache (1.2) lib/rack/cache/context.rb:143:in `pass' 
rack-cache (1.2) lib/rack/cache/context.rb:155:in `invalidate' 
rack-cache (1.2) lib/rack/cache/context.rb:71:in `call!' 
rack-cache (1.2) lib/rack/cache/context.rb:51:in `call' 
railties (3.2.13) lib/rails/engine.rb:479:in `call' 
railties (3.2.13) lib/rails/application.rb:223:in `call' 
railties (3.2.13) lib/rails/railtie/configurable.rb:30:in `method_missing' 
passenger (4.0.8) lib/phusion_passenger/rack/thread_handler_extension.rb:77:in `process_request' 
passenger (4.0.8) lib/phusion_passenger/request_handler/thread_handler.rb:140:in `accept_and_process_next_request' 
passenger (4.0.8) lib/phusion_passenger/request_handler/thread_handler.rb:108:in `main_loop' 
passenger (4.0.8) lib/phusion_passenger/request_handler.rb:441:in `block (3 levels) in start_threads' 

сделал быстрое решение, как этот

def create 
    @user = current_user 
    @message = Message.new(params[:message]) 
    @message.message = params[:message][:text] 
    @message.user_id = current_user.id 
    @message.status = 'Queued' 
    if @message.save 
     MessageWorker.perform_async(@message.id, lists, current_user.id) 
     render json: {status: "success", to: @message.count, from: @message.from, 
         balance: @user.balance, message: @message.message, 
         time: @message.created_at} 
    else 
     render status: 400 
    end 
end 

и теперь получаю эту ошибку

undefined method `[]=' for nil:NilClass 
+1

что такое номер строки 5 в вашем контроллере? Разве это не до_фильтра или что-то еще? –

+0

@OlivierElMekki Я отредактировал, проверьте снизу! – acacia

+0

Что является источником класса Message? –

ответ

2

Вы не можете создать сообщение, когда вместо хэша, вы передаете строку.

Ваш возвращает params[:message] вызов 'hello acacia' так в строке 5 вы на самом деле называют:

@message = Message.new('hello acacia') 

который является недействительным.

Сообщение ActiveRecord :: Model, поэтому его инициализатор ожидает хэш.

+0

Как я могу передать значение сообщения в хеше сообщения? – acacia

+0

В каком атрибуте вашей модели сообщений вы сохраняете сообщение? Если, например, ваша модель сообщений имеет атрибут 'content', тогда вы должны что-то вроде этого:' @message = Message.new (content: params [: message]) ' –

+0

его хранится в сообщении – acacia

Смежные вопросы