2014-06-24 110 views
4

我正在使用rails 4.1。Rails jQuery POST - ArgumentError - 錯誤的參數數量(1代表0)?

我已經設置了一個自定義控制器。我配置了以下路由:

resources :chats 

我正在嘗試使用jQuery向控制器發送請求。下面是代碼:

$.post('/chats/', { session: { advisor_id: $(this).attr('data-id') } }, function (data) { 
    eval(data); 
}); 

編輯:這裏是我的控制器代碼 -

class ChatsController < ApplicationController 

    def create 
    #create the new session 
    @session = Session.create(:advisor_id => session_params[:advisor_id], :session_type => @session.call!, :client_id => current_user.id) 

    end 

    private 
    def session_params 
    params[:session].permit(:advisor_id, :client_id, :session_type) 
    end 
end 

編輯:這裏是我的模型的代碼 -

class Session < ActiveRecord::Base 
    enum session_type: [ :chat, :call ] 
    belongs_to :client, :class_name => "User", :foreign_key => :client_id 
    belongs_to :advisor, :class_name => "User", :foreign_key => :advisor_id 
    has_many :instant_messages 

    def self.obj_name(id) 
    o = Session.find(id) 
    "#{o.client.full_name} and #{o.advisor.full_name}" 
    end 
end 

然而,引發錯誤:

ArgumentError - 參數的錯誤數量(1 for 0): activesupport(4.1.1)lib/active_support/callbacks.rb:80:in run_callbacks' actionpack (4.1.1) lib/abstract_controller/callbacks.rb:19:in process_action' actionpack(4.1.1)lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (4.1.1) lib/action_controller/metal/instrumentation.rb:31:in block in process_action' activesupport(4.1.1)lib/active_support/notifications.rb:159:block in instrument' activesupport (4.1.1) lib/active_support/notifications/instrumenter.rb:20:in instrument' activesupport(4.1.1)lib/active_support/notifications.rb:159:in instrument' actionpack (4.1.1) lib/action_controller/metal/instrumentation.rb:30:in process_action' actionpack(4.1.1) )lib/action_controller/metal/params_wrapper.rb:250:in process_action' activerecord (4.1.1) lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack(4.1.1)lib/abstract_controller/base.rb:136:in process' actionview (4.1.1) lib/action_view/rendering.rb:30:in process' actionpack(4.1.1)lib/action_controller/metal .rb:195:在dispatch' actionpack (4.1.1) lib/action_controller/metal/rack_delegation.rb:13:in派遣' actionpack(4.1.1)lib/action_controller/metal.rb:231:在block in action' actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:80:in發送' actionpack(4.1.1)lib/action_dispatch/routing/route_set.rb:48:in call' actionpack (4.1.1) lib/action_dispatch/journey/router.rb:71:in block'in call' actionpack(4.1 .1)lib/action_dispatch/journey/router.rb:59:在call' actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:676:in調用' rack-pjax(0.7.0)lib/rack/pjax.rb:12:在call' warden (1.2.3) lib/warden/manager.rb:35:in區塊中調用' warden(1.2.3 )lib/warden/manager.rb:34:在call' rack (1.5.2) lib/rack/etag.rb:23:in調用' rack(1.5.2)lib/rack/conditionalget.rb:35:在call' rack (1.5.2) lib/rack/head.rb:11:in調用' remotipart(1.2.1)lib/remotipart/middleware.rb :27:在call' actionpack (4.1.1) lib/action_dispatch/middleware/params_parser.rb:27:in中調用' actionpack(4.1.1)lib/action_dispatch/middleware/flash.rb:254:在call' rack (1.5.2) lib/rack/session/abstract/id.rb:225:in上下文' rack(1.5.2)lib/rack/session/abstract/id.rb:220:在call' actionpack (4.1.1) lib/action_dispatch/middleware/cookies.rb:560:in調用' activerecord(4.1.1)lib/active_record/query_cache.rb:36:在call' activerecord (4.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in調用' activerecord(4.1 .1)lib/active_record/migration.rb:380:在call' actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in塊中調用' activesupport(4.1.1)lib/active_support/callbacks.rb:82:在run_callbacks' actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:27:in調用' actionpack(4.1.1)lib/action_dispatch /middleware/reloader.rb:73:in call' actionpack (4.1.1) lib/action_dispatch/middleware/remote_ip.rb:76:in call' better_errors(1.1.0)lib/better_errors/middleware.rb:84:in protected_app_call' better_errors (1.1.0) lib/better_errors/middleware.rb:79:in better_errors_call' better_errors(1.1.0)lib/better_errors/middleware.rb:56 :在call' actionpack (4.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in調用' actionpack(4.1.1)lib/action_dispatch/middleware/show_exceptions.rb :30:在call' railties (4.1.1) lib/rails/rack/logger.rb:38:in call_app' railties(4.1.1)lib/rails/rack/logger.rb:20:在block in call' activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in塊中標記爲' activesupport(4.1.1)lib/active_support/tagged_logging.rb:26:in tagged' activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in tagged' railties(4.1。1)lib/rails/rack/logger.rb:20:在call' quiet_assets (1.0.2) lib/quiet_assets.rb:18:in call_with_quiet_assets' actionpack(4.1.1)lib/action_dispatch/middleware/request_id.rb:21:在call' rack (1.5.2) lib/rack/methodoverride.rb:21:in調用' rack(1.5.2)lib/rack/runtime.rb:17:在call' activesupport (4.1.1) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in調用' rack(1.5.2)lib/rack/lock.rb:17:在call' actionpack (4.1.1) lib/action_dispatch/middleware/static.rb:64:in調用' rack(1.5.2)lib/rack/sendfile.rb:112:在call' railties (4.1.1) lib/rails/engine.rb:514:in中調用' railties(4.1.1)lib/rails/application.rb:144:在call' rack (1.5.2) lib/rack/content_length.rb:14:in調用' thin(1.6.2)lib/thin/connection.rb:86:in block in pre_process' thin (1.6.2) lib/thin/connection.rb:84:in pre_process' thin(1.6 .2)lib/thin/connection.rb:53:在process' thin (1.6.2) lib/thin/connection.rb:39:in receive_data' eventmachine(1.0.3)lib/eventmachine.rb:187:在(1.6.2)lib/thin/server.rb:162:在start' rack (1.5.2) lib/rack/handler/thin.rb:16:in運行' 機架(1.5.2)lib/rack/server.rb:264:在start' railties (4.1.1) lib/rails/commands/server.rb:69:in開始' railties(4.1。 1)LIB /導軌/命令/ commands_tasks.rb:81:在block in server' railties (4.1.1) lib/rails/commands/commands_tasks.rb:76:in服務器 ' railties(4.1.1)LIB /導軌/命令/ commands_tasks.rb:40:在run_command!' railties (4.1.1) lib/rails/commands.rb:17:in' 斌/軌道:8:<top (required)>' ruby-debug-ide (0.4.23.beta1) lib/ruby-debug-ide.rb:86:in debug_program ' 紅寶石調試-IDE(0.4.23.beta1)斌/中,RDebug-IDE:110:在<top (required)>' -e:1:in'

爲什麼拋出這個錯誤?我怎樣才能接受請求?

+1

我們能否真正看到您的Controller方法用於POST操作? – richsinn

+0

錯誤將與您的控制器後端(您沒有發佈)有關。實際的錯誤是'參數的錯誤數量(1代表0)' - 你是否用參數調用任何'ActiveRecord'方法? –

+0

我已經添加了控制器的代碼。 – startupsmith

回答

8

我設法解決了這個問題。問題是我在控制器中有一個名爲「send」的動作。我現在知道「send」是一種在ruby中用來調用其他方法的方法。

下面是關於ruby「send」方法的更多信息。 What does send() do in Ruby?

+0

謝謝!試圖找出造成這種情況的原因,我一直在撞牆。 –

+0

請注意,您可以通過與任何*預先存在的方法匹配的控制器操作來擊中此障礙。我剛剛遇到同樣的問題,但是這是因爲我使用了'process',這是'ActionController :: Base'上的一個Rails定義的方法。 –

相關問題