[英]Rails controller does not accept JSON?
我正在嘗試通過JSON請求創建ActiveRecord對象。 但是,控制器無法在新創建的對象中設置在參數中傳遞的變量。 例如,人員對象具有兩個字段:名字和姓氏。
由JSON.org庫的JSON.stringify函數生成的JSON產生:
{"firstname" : "Joe" , "lastname" : "Bloggs"}
但是,控制器希望JSON采用以下形式:
{ "Person" : {"firstname" : "Joe" , "lastname" : "Bloggs"} }
我知道在正常的事件過程中(對於HTTP請求),請求的參數嵌套在正在創建的模型的類名下。
控制器中的create動作是:
def create
@person = Person.new(params[:person])
respond_to do |format|
if @person.save
flash[:notice] = 'Person was successfully created.'
format.html { redirect_to(@person) }
format.xml { render :xml => @person, :status => :created, :location => @person }
format.json { render :json => @person, :status => :created, :location => @person }
else
format.html { render :action => "new" }
format.xml { render :xml => @person.errors, :status => :unprocessable_entity }
format.json { render :json => @person.errors, :status => :unprocessable_entity }
end
end
end
控制器處理生成的JSON請求的最巧妙方法是什么? 或者,如何從Javascript對象生成“正確的” JSON以傳遞給控制器?
TIA,亞當
如果您只是傳遞所有人員參數的哈希值(而不是傳遞以“ person”作為鍵的嵌套哈希值),則您應該能夠執行@person = Person.new(params)
。
至於ActiveRecord 3.0.7,您只需添加
self.include_root_in_json = false
到您的模型(person.rb)以擺脫根({“ Person”:“)部分的影響。
允許使用諸如{“ firstname”:“ Joe”,“ lastname”:“ Bloggs”}之類的平面JSON輸入以及通過HTML表單獲得的嵌套類型的一個想法是:
@person = Person.new(params[:person] || params)
respond_to do |format|
..
end
另外,
Person.new(params.reject{|k,v| k != "firstname" || k != "lastname"})
可以在您的Ruby中使用。...
Person.new({:firstname => params[:firstname], :lastname => params[:lastname]})
-這實際上有效
這是一個更具前瞻性的解決方案:
Person.new(params.reject{|k,v| not Person.column_names.include?(k) })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.