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 :jsonsẽ không tự động gọi to_jsonphươ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 Usermô hình, render :json => @usersẽ tạo ra ArgumentErrormô 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 renderkhông thực sự gọi Model#to_jsonkhi 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?
usernamekhông phải là một phương pháp và foovà barkhô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,foohoặcbarphương thức yêu cầu đối số?