1

ラズベリーパイからのプットリクエストの解析と取得に問題があり、ウェブサイトのデータを送信しています。

コントローラーが下にあるワーカーモデルのいくつかのフィールドを更新しようとしています

class WorkersController < ApplicationController

def new
   @worker = Worker.new
   @user = User.find(params[:user_id])
end

def create
   @user = User.find(params[:user_id])
   @worker= Worker.new(params[:worker])
   @worker.user_id= @user.id
   if @worker.save
    flash[:success] = "Worker information saved!"
    redirect_to @user
   else
     render 'new'
   end
end


def show
end

def update
    @user = User.find(params[:user_id])
    @worker = Worker.find(params[:id])
    @MHS = params[:SUMMARY][:MHS_av]
    @worker.hashrate = @MHS
    @worker.save
end


end

以下はサーバー側の受信プットリクエストです

Started PUT "/users/1/workers/1" for xxx.xxx.xx.xxx at 2013-06-13 03:06:02 +0000
Processing by WorkersController#update as XML

ここにパラメータがあります

Parameters: {"STATUS"=>[{"STATUS"=>"S", "When"=>1371092750, "Code"=>11, "Msg"=>"Summary", "Description"=>"cgminer 3.1.1"}], "SUMMARY"=>[{"Elapsed"=>60394, "MHS av"=>1.92, "Found Blocks"=>1, "Getworks"=>1217, "Accepted"=>9104, "Rejected"=>138, "Hardware Errors"=>0, "Utility"=>9.04, "Discarded"=>2428, "Stale"=>20, "Get Failures"=>1, "Local Work"=>9513, "Remote Failures"=>0, "Network Blocks"=>458, "Total MH"=>116212.6295, "Work Utility"=>1769.84, "Difficulty Accepted"=>1747840.0, "Difficulty Rejected"=>26496.0, "Difficulty Stale"=>3840.0, "Best Share"=>74960510}], "id"=>"1", "user_id"=>"1", "worker"=>{}}

これらのエラーが続きます

WARNING: Can't verify CSRF token authenticity

at=info method=PUT path=/users/1/workers/1 host=miningmonitor.herokuapp.com fwd="xxx.xxx.xx.xxx" dyno=web.1 connect=1ms service=1029ms status=500 bytes=643

TypeError (can't convert Symbol into Integer):


app/controllers/workers_controller.rb:27:in `[]'

Completed 500 Internal Server Error in 345ms



app/controllers/workers_controller.rb:27:in `update'

Ruby on rails は着信メッセージが XML であると考えているようですが、その JSON は、この put リクエストが JSON であることをどこかに指定する必要がありますか? また、Ruby on rails は JSON を解析してパラメーターに変換するだけで、パラメーターからデータを取得できると言われましたが、それは本当ですか?

レイアウトからの application.html.erb からのコンテンツの追加

<head>
 <title>Mining Monitoring Website</title>
 <%= stylesheet_link_tag "application", media: "all"%>
 <%= javascript_include_tag "application" %>
 <%= csrf_meta_tags %>
 <%= render 'layouts/shim' %>
</head>
4

1 に答える 1

0

よく見てください。SUMMARY は配列であり、ハッシュではありません。POST (PUT) データをどのように構築しているかはわかりませんが、次の方法でそれらにアクセスするとうまくいくはずです

params[:SUMMARY][0][:MHS_av]

また、見てくださいMHS_av- 着信パラメータにはアンダースコアがないようです。

CSRFが欠落している理由がありますよね?

于 2013-06-13T05:31:33.703 に答える