2012-06-27 80 views
0

我正在使用Twilio發送SMS消息來更改特定模型的(用戶)屬性(在本例中爲金錢)的值。更改模型屬性的值

我成功從Twilio POST中拉出參數,雖然沒有運氣將屬性更改保存到模型屬性中。有什麼想法嗎?

下面是從用戶控制器 '更新' 我的代碼:

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { head :no_content } 

     else 
     format.html { render action: "edit" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 

    require 'rubygems' 
    require 'twilio-ruby' 

    @account_sid = 'AC0626c6d8dc0a4551b159161c5ca7ced2' 
    @auth_token = '**********************************' 

    # set up a client to talk to the Twilio REST API 
    @client = Twilio::REST::Client.new(@account_sid, @auth_token) 

    message_body = params["Body"] 
    from_number = params["From"] 

    if from_number == "+**********" 
     @user = User.find(1) # :select => :money 
     existing_money = @user.money 
     doug_sum = message_body.to_f + existing_money 

     @user.money = doug_sum 
     @user.save 

     puts "This is Doug's sum: #{doug_sum} and it has been saved" 
    else 
     puts "This is not a valid frump number" 
    end 

    end 

這裏是Heroku的服務器日誌說:

2012-06-27T21:09:06+00:00 app[web.1]: Started POST "/users" for 184.73.31.10 at 2012-06-27 21:09:06 +0000 
2012-06-27T21:09:06+00:00 app[web.1]: Processing by UsersController#create as HTML 
2012-06-27T21:09:06+00:00 app[web.1]: Parameters: {"AccountSid"=>"AC0626c6d8dc0a4551b159161c5ca7ced2", "Body"=>"4", "ToZip"=>"13203", "FromState"=>"NY", "ToCity"=>"SYRACUSE", "SmsSid"=>"SMa973490ac1db98b25247b600fe068d6f", "ToState"=>"NY", "To"=>"+13158491369", "ToCountry"=>"US", "FromCountry"=>"US", "SmsMessageSid"=>"SMa973490ac1db98b25247b600fe068d6f", "ApiVersion"=>"2010-04-01", "FromCity"=>"SYRACUSE", "SmsStatus"=>"received", "From"=>"+13154368655", "FromZip"=>"13135"} 
2012-06-27T21:09:06+00:00 app[web.1]: WARNING: Can't verify CSRF token authenticity 
2012-06-27T21:09:06+00:00 app[web.1]: Rendered users/_form.html.erb (5.4ms) 
2012-06-27T21:09:06+00:00 app[web.1]: Rendered users/new.html.erb within layouts/application (34.9ms) 
2012-06-27T21:09:06+00:00 app[web.1]: Completed 200 OK in 47ms (Views: 36.7ms | ActiveRecord: 1.5ms) 
2012-06-27T21:09:06+00:00 heroku[router]: POST frump.herokuapp.com/users dyno=web.1 queue=0 wait=0ms service=57ms status=200 bytes=1582 

最後,這裏的Twiml文件接收短信:

<?xml version="1.0" encoding="UTF-8" ?> 
<Response> 
    <Redirect method="POST">http://frump.herokuapp.com/users</Redirect> 
</Response> 

以下是查看碼:

<% @users.each do |user| %> 
    <tr> 
    <td><%= user.name %></td> 
    <td>$<%= user.money %></td> 
    <td><%= link_to 'Show', user %></td> 
    <td><%= link_to 'Edit', edit_user_path(user) %></td> 
    <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
<% end %> 
</table> 

在此先感謝!

+1

請發表您的視圖代碼。正如我在Heroku服務器日誌中看到的,你的參數看起來像'Parameters:{「AccountSid」=>「AC0626c6d8dc0a4551b159161c5ca7ced2​​」,「Body」=>「4」,「ToZip」=>「13203」,「FromState」=>「NY 「ToCity」=>「SYRACUSE」,「SmsSid」=>「SMa973490ac1db98b25247b600fe068d6f」,「ToState」=>「NY」,「To」=>「+ 13158491369」,「ToCountry」=>「US」,「FromCountry 「=>」US「,」SmsMessageSid「=>」SMa973490ac1db98b25247b600fe068d6f「,」ApiVersion「=>」2010-04-01「,」FromCity「=>」SYRACUSE「,」SmsStatus「=>」received「 =>「+ 13154368655」,「FromZip」=>「13135」}'但它應該看起來像'參數:{「user」=> {「AccountSid」=> ..}} – abhas

+0

發表視圖代碼 - 欣賞你的幫助: – dougiebuckets

+0

嗨,我建議逐步逐步通過你的邏輯和檢查你的假設在每種情況下。你真的檢索一個用戶對象嗎?你有沒有'From'號碼? user.save是否更新存儲在數據庫中的值?這些都是代碼可能被破壞的所有地方,最好檢查每個代碼。 –

回答

1

日誌說WARNING: Can't verify CSRF token authenticity,所以很可能你沒有從'twilio'獲取數據,因爲你的rails應用程序端沒有認證失敗。像有

protect_from_forgery 

在你的應用程序控制器。

嘗試除非是來自防僞保護你的行動,並看到,像

class UsersController < ApplicationController 
    protect_from_forgery :except => ["create"] 
end 

HTH