2012-12-28 107 views
2

我有一個Ruby on Rails服務器應用程序(託管在Heroku上),它應該能夠接收帶有JSON字符串的HTTP POST請求並將JSON對象添加到數據庫。有兩種數據庫模型:感恩節和請求。將json請求發佈到Ruby on Rails服務器應用程序 - 500錯誤

控制器/ request_controller.rb:

class RequestsController < ApplicationController 
    [...] 
    # POST /requests 
    # POST /requests.json 
    def create 
    @request = Request.new(params[:request]) 

    respond_to do |format| 
     if @request.save 
     format.html { redirect_to @request, notice: 'Request was successfully created.' } 
     format.json { render json: @request, status: :created, location: @request } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @request.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
[...] 
end 

對於不同的數據庫模型中的JSON鍵對象值應爲「感謝」和「請求」爲感恩節DB模型和請求DB模型分別。

模型/ request.rb:

class Request < ActiveRecord::Base 
    attr_accessible :request 
end 

模型/ thankgiving.rb:

class Thanksgiving < ActiveRecord::Base 
    attr_accessible :thanks 
end 

當我發佈一個HTTP請求http://YADA.herokuapp.com/thanksgivings.json一切正常,但是當我把它.. ./requests.json,我得到一個500錯誤。如果我在JSON字符串中使用錯誤的鍵,則請求成功,但該值爲空。

請求1:(正確的請求到thanksgiving.json)
POST
主機:http://YADA.herokuapp.com/thanksgivings.json
內容類型:應用/ JSON
體:{ 「謝謝」: 「QWERTY」}

請求2:(正確的請求到request.json - 返回500)
POST
主機:http://YADA.herokuapp.com/requests.json
內容類型:應用/ JSON
體:{「請求」:「QWERTY」}

請求3:(故障鍵 - 將成功:值將是零,關鍵是「請求」響應,數據庫元素將被添加)
POST
主機:http://YADA.herokuapp.com/requests.json
內容類型:應用/ JSON
體:{ 「ABC」: 「QWERTY」}

奇怪的是,這兩個控制器,thanksgivings_controller.rb和requests_controller.rb,是「相同的「但他們的行爲有所不同。

任何人都知道如何成功地做到這一點?

+1

從這些請求發佈服務器日誌 - 我敢打賭,只是看着他們會給你一個很好的想法,爲什麼發生這種情況。 – Veraticus

回答

1

根據服務器日誌,有一個NoMethodError - stringify_keys。這個問題的答案是解決辦法:undefined method `stringify_keys'

更改
@request = Request.new(params[:request])

@request = Request.new(:request => params[:request])
的伎倆。

相關問題