2015-04-26 28 views
0

我必須在這裏丟失一些基本的東西。我對於爲什麼Rails試圖對給定路線執行錯誤的方法感到茫然。我有一個控制器,而不是通過Twilio處理SMS消息。爲什麼Rails試圖在我的控制器中執行錯誤的方法?

sms_controller.rb

class SmsController < ApplicationController 
    skip_before_filter :verify_authenticity_token 

    def send(message, number) 
    twilio_sid = ENV["TS_TWILIO_SID"] 
    twilio_token = ENV["TS_TWILIO_TOKEN"] 

    disclaimer = "\n\nReply HELP for help. Reply STOP to unsubscribe. Reply YES to resubscribe." 

    @twilio_client = Twilio::REST::Client.new twilio_sid, twilio_token 

    @twilio_client.account.sms.messages.create(
     :from => ENV["TS_TWILIO_PHONE_NUMBER"], 
     :to => number, 
     :body => message + disclaimer 
    ) 
    end 

    def receive 
    message_body = sms_params[:body] 
    from_number = sms_params[:from] 

    SMSLogger.log_text_message from_number, message_body 
    end 

    private 

    def sms_params 
    params.require(:sms).permit(:body, :from) 
    end 
end 

在我的routes.rb文件中,我定義了用於處理短信後路線從用戶得到回來。

的routes.rb

require 'sidekiq/web' 

<redacted>::Application.routes.draw do 

    authenticate :user, lambda { |u| u.admin? } do 
    mount Sidekiq::Web => '/sidekiq' 
    end 

    devise_for :users, controllers: { 
         registrations: 'registrations', 
         sessions: 'sessions', 
         passwords: 'passwords', 
         :omniauth_callbacks => "omniauth_callbacks" 
        } 

    get 'users/sign_up', to: redirect('/sign-up') 

    # Static Routes 
    get 'feed'   => 'client#feed' 
    get 'share/:tag'  => 'client#share' 
    get 'share/:tag/:id' => 'client#share' 
    get 'history'   => 'client#history' 
    get 'favorites'  => 'client#favorites' 
    get 'submissions'  => 'client#submissions' 
    get 'bumps'   => 'client#bumps' 
    get 'tag'    => 'client#tag' 
    get 'bump/:ref_id' => 'client#bump' 

    #Enable Push 
    get 'push-enable/:user_id' => 'client#push_enable' 
    get 'push'     => 'client#push' 

    # Beta access flow, ordered by good path 
    get 'code'    => 'client#access_code' 
    get 'disclaimer'   => 'client#disclaimer' 
    get 'terms'    => 'client#terms' 
    get 'sign-up'   => 'client#signup' 
    get 'resend'    => 'client#resend_link' 
    get 'welcome'   => 'client#welcome' 
    get 'selectusername'  => 'client#username_select' 

    # Multi-step beta access flow 
    post 'confirm-beta'    => 'client#confirm_beta_token' 
    post 'confirm-disclaimer'  => 'client#disclaimer_agreement' 
    post 'confirm-terms'    => 'client#terms_agreement' 
    post 'sms'      => 'sms#receive' 

    # User routes 
    put 'user'      => 'users#update' 
    post 'authentication/from-native' => 'users#from_native' 

    # JSON API 
    namespace :api do 

    get 'card/:id' => 'media#show' 

    # Media API 
    get 'media/:tag'      => 'media#next' 
    get 'share/:tag/:id/:limit/:offset' => 'media#share_feed' 
    post 'media/:media_id/tags/:name/'  => 'tags#create' 
    post 'media/:media_id/report'   => 'media#report' 
    get 'media/:media_id/unreport'   => 'media#remove_report' 

    # Tags API 
    get 'tags'       => 'tags#tag_feed' 
    get 'tags/search'     => 'tags#search' 
    get 'tags/:name'     => 'tags#show' 

    # Vote API 
    get 'votes'       => 'votes#show' 
    post 'votes/:vote/:id/tag/:tag'  => 'media#create_vote' 

    # Users API 
    get 'users/:id/stats'    => 'votes#stats' 
    get 'users'       => 'users#stats' 
    get 'users/buddies'     => 'users#buddies' 
    patch 'users/:id'     => 'users#update' 
    get 'users/unsubscribe/:id/:type' => 'users#unsubscribe' 
    get 'users/check-name/:username'  => 'users#check_username' 

    # History API 
    get 'history/paginated/:limit/:offset' => 'users#paginated_history' 
    get 'history/bracketed/:id'    => 'users#bracketed_history' 
    get 'history/next/:id'     => 'users#next_history' 
    get 'history/previous/:id'    => 'users#previous_history' 

    # Favorites API 
    get 'favorites/paginated/:limit/:offset'  => 'favorites#paginated_history' 
    get 'favorites/bracketed/:id'     => 'favorites#bracketed_history' 
    get 'favorites/next/:id'      => 'favorites#next_history' 
    get 'favorites/previous/:id'     => 'favorites#previous_history' 
    post 'favorites/:card_id'      => 'favorites#create' 
    delete 'favorites/:card_id'     => 'favorites#delete' 

    # Referrals API 
    get 'referral/made/paginated/:limit/:offset'   => 'referrals#paginated_collection_made' 
    get 'referral/received/paginated/:limit/:offset'  => 'referrals#paginated_collection_received' 
    post 'referral/:card_id/:user_ids'     => 'referrals#create' 
    post 'referral/:card_id/:referral_id'     => 'referrals#bump' 
    get 'referral/seen/:referral_id'      => 'referrals#seen' 

    #Bumps API 
    post 'bump/:media_id/:sharer_ids'  => 'bumps#create' 
    get 'bump/seen/:bump_id'    => 'bumps#seen' 


    end 

    get '/desktop' => 'client#desktop' 

    root to: "client#index" 

end 

出於某種原因,當我張貼到這條路線,它試圖執行的發送方法,我也得到從參數的號碼有誤(1 2)錯誤軌道。爲什麼是這樣?我的路線文件沒有定義調用收到的方法?

錯誤消息

Started POST "/sms" for 127.0.0.1 at 2015-04-25 18:09:22 -0700 
    ActiveRecord::SchemaMigration Load (0.6ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by SmsController#receive as */* 
    Parameters: {"Body"=>"\"hello\"", "From"=>"\"+16613328096\""} 
Completed 500 Internal Server Error in 0ms 

ArgumentError (wrong number of arguments (1 for 2)): 
    app/controllers/sms_controller.rb:4:in `send' 


    Rendered /Users/placey/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.6ms) 
    Rendered /Users/placey/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.7ms) 
    Rendered /Users/placey/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms) 
    Rendered /Users/placey/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (24.2ms) 
+2

也許你有另一條具有更高優先級的路由,而另一條路由發送到錯誤的動作。發佈您的routes.rb。 – dx7

+0

有點懷疑它......這個名字空間中沒有任何東西以短信開頭。剛發佈完整的文件。讓我知道你是否看到了什麼。謝謝。 – VirtualPaul

+0

routes.rb似乎沒問題。你能發佈完整的錯誤信息嗎? – dx7

回答

0

所有Ruby對象具有從Object類(http://ruby-doc.org/core-2.2.2/Object.html#method-i-send)繼承的方法send。當您創建名爲send的操作時,您會覆蓋它。

Rails中的某些代碼在調用send時帶有1個參數(因爲Object#send可以接收任何參數)。但是當你重寫它時,你的方法已經被調用,並且它期望準確地接收2個參數。

您需要將您的方法send重命名爲其他名稱。

+0

太棒了!作品。 Thx男人! – VirtualPaul

+0

不客氣。如果您認爲它有用,您可以給答案+1。 :) – dx7

+0

其實我不能...... bcuz顯然你需要+10的聲望纔可以在這裏做幾乎所有的事情:P – VirtualPaul

相關問題