Je remarque sur la documentation de jbuilder
: https://github.com/rails/jbuilderComment fonctionne cette syntaxe:. Objet (variable: symbol1,: symbol2)
json.(@message, :created_at, :updated_at)
Je l'ai testé moi-même dans un code avec jbuilder
et il semble être synonyme de ceci:
json.created_at(@message.created_at)
json.updated_at(@message.updated_at)
Mais je n'ai jamais rencontré cette syntaxe avant, et n'a jamais vu une telle chose dans tout autre document rubis ou rails. Où cette fonctionnalité de ruby est-elle documentée? Qu'est-ce que c'est exactement ce qu'il fait, et quelles sont les mises en garde à cet égard?
EDIT:
Après la première réponse, je soupçonne maintenant l'objet json
ressemble à quelque chose comme ça, et met en œuvre la méthode call
:
class FakeJson
def initialize
end
def call(obj, *methods)
methods.each do |method|
self.public_send(method, obj.public_send(method))
end
end
def method_missing(*args)
puts "called method with #{args.inspect}"
end
end
Oh! Je pense que je comprends maintenant. JBuilder a son propre DSL à l'intérieur du bloc où vous créez la sortie json. Je pense que l'objet 'json' pourrait ressembler à quelque chose comme (mon edit ci-dessus) – nzifnab
json est le proc, pas @ message – jshort
@jshort Vous avez raison. Je l'ai corrigé. – sawa