Aktualizacja:
Ten problem nie został właściwie zbadany. Prawdziwy problem leży wewnątrz render :json
.
Pierwsze wklejenie kodu w pierwotnym pytaniu da oczekiwany wynik. Jednak nadal istnieje zastrzeżenie. Zobacz ten przykład:
render :json => current_user
NIE jest tym samym, co
render :json => current_user.to_json
Oznacza to, render :json
że nie wywoła automatycznie to_json
metody skojarzonej z obiektem User. W rzeczywistości , jeśli to_json
jest nadpisywany w User
modelu, render :json => @user
wygeneruje ArgumentError
opisane poniżej.
Podsumowanie
# 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
To wszystko wydaje mi się głupie. Wydaje się, że mówi mi, że w render
rzeczywistości nie wywołuje, Model#to_json
gdy :json
określono typ . Czy ktoś może wyjaśnić, co się tu naprawdę dzieje?
Każdy genii, który może mi w tym pomóc, prawdopodobnie odpowie na moje inne pytanie: Jak zbudować odpowiedź JSON, łącząc @ foo.to_json (opcje) i @ bars.to_json (opcje) w Railsach
Oryginalne pytanie:
Widziałem kilka innych przykładów na SO, ale żaden nie robi tego, czego szukam.
Próbuję:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Dostaję ArgumentError: wrong number of arguments (1 for 0)
w
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Jakieś pomysły?
username
,foo
albobar
metody oczekiwać argumenty?