Cập nhật:
Vấn đề này đã không được khám phá đúng cách. Vấn đề thực sự nằm ở bên trong render :json
.
Việc dán mã đầu tiên vào câu hỏi ban đầu sẽ mang lại kết quả như mong đợi. Tuy nhiên, vẫn có một sự báo trước. Xem ví dụ này:
render :json => current_user
là KHÔNG giống như
render :json => current_user.to_json
Nghĩa là, render :json
sẽ không tự động gọi to_json
phương thức được liên kết với đối tượng Người dùng. Trong thực tế , nếu to_json
đang được ghi đè trên User
mô hình, render :json => @user
sẽ tạo ra ArgumentError
mô tả bên dưới.
tóm lược
# 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
Tất cả điều này có vẻ ngớ ngẩn đối với tôi. Điều này dường như cho tôi biết rằng render
không thực sự gọi Model#to_json
khi loại :json
được chỉ định. Ai đó có thể giải thích những gì thực sự đang xảy ra ở đây?
Bất kỳ genii nào có thể giúp tôi điều này đều có thể trả lời câu hỏi khác của tôi: Cách tạo phản hồi JSON bằng cách kết hợp @ foo.to_json (tùy chọn) và @ bar.to_json (tùy chọn) trong Rails
Câu hỏi gốc:
Tôi đã thấy một số ví dụ khác trên SO, nhưng tôi không làm được những gì tôi đang tìm kiếm.
Tôi đang cô:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Tôi đang ArgumentError: wrong number of arguments (1 for 0)
vào
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Bất kỳ ý tưởng?
username
không phải là một phương pháp và foo
và bar
không đòi hỏi phương pháp. Tôi đã cập nhật câu hỏi của mình để cho biết lỗi đang xảy ra ở đâu.
username
,foo
hoặcbar
phương thức yêu cầu đối số?