อัปเดต:
ปัญหานี้ไม่ได้รับการสำรวจอย่างเหมาะสม render :json
ปัญหาที่แท้จริงอยู่ภายใน
การวางโค้ดแรกในคำถามเดิมจะให้ผลลัพธ์ที่คาดหวัง อย่างไรก็ตามยังมีข้อแม้ ดูตัวอย่างนี้:
render :json => current_user
คือไม่ได้เช่นเดียวกับ
render :json => current_user.to_json
นั่นคือrender :json
จะไม่เรียกใช้to_json
เมธอดที่เกี่ยวข้องกับวัตถุ User โดยอัตโนมัติ ในความเป็นจริงหากto_json
ถูกแทนที่บนUser
โมเดลrender :json => @user
จะสร้างตามที่ArgumentError
อธิบายไว้ด้านล่าง
สรุป
# works if User#to_json is not overridden
render :json => current_user
# If User#to_json is overridden, User requires explicit call
render :json => current_user.to_json
ทั้งหมดนี้ดูเหมือนโง่สำหรับฉัน สิ่งนี้ดูเหมือนจะบอกฉันว่าrender
ว่าไม่ได้โทรจริงๆModel#to_json
เมื่อ:json
ระบุประเภท ใครช่วยอธิบายได้ว่าเกิดอะไรขึ้นที่นี่?
genii ใด ๆ ที่สามารถช่วยฉันได้อาจตอบคำถามอื่นของฉัน: วิธีสร้างการตอบสนอง JSON โดยรวม @ foo.to_json (ตัวเลือก) และ @ bar.to_json (ตัวเลือก) ใน Rails
คำถามเดิม:
ฉันเคยเห็นตัวอย่างอื่น ๆ ใน SO แต่ฉันไม่ได้ทำในสิ่งที่ฉันกำลังมองหา
ฉันกำลังพยายาม:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
ฉันกำลังArgumentError: wrong number of arguments (1 for 0)
เข้าไป
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
ความคิดใด ๆ ?
username
,foo
หรือbar
วิธีการคาดหวังว่าข้อโต้แย้ง?