2013-08-01 4 views
5

Ich habe einfach jbuilder AnsichtWie wird in jbuilder views eine leere Zeichenfolge anstelle von null zurückgegeben?

json.id pharmaceutic.id 
json.name pharmaceutic.name 
json.dosage pharmaceutic.dosage.name 

Wenn pharmaceutic.dosage => nil

Meine gemacht json wie unten aussieht:

{"id":1,"name":"HerzASS ratiopharm","dosage":null} 

ich für alle JBuilder gerne einrichten würde sieht, dass, wenn einige Attribut nil es ist sollte als leere Zeichenfolge gerendert werden.

Wie erreicht man das?

+1

Vielleicht tun, indem Sie dies tun? 'json.dosage pharmaceutic.dosage.name || "" 'mit diesem Operanden, wenn' dosing.name' 'nil' ist, wird die leere Zeichenkette verwendet – MrYoshiji

Antwort

5

nil.to_s #=> "" so, Sie einfach .to_s

json.id pharmaceutic.id 
json.name pharmaceutic.name.to_s 
json.dosage pharmaceutic.dosage.name.to_s 
+8

Das ist eine gute Lösung, aber ich suche eine Antwort, wo ich nicht für alle meine 500 '' s_' anzeigen muss Attribute. – tomekfranek

0

auf der akzeptierte Antwort zu verlängern hinzufügen können, hier ist eine einfache Proxy-Klasse genau das zu tun:

class Proxy 

    def initialize(object) 
    @object = object 
    end 

    def method_missing method, *args, &block 
    if @object.respond_to? method 
     @object.send(method, *args, &block).to_s 
    else 
     super method, *args, &block 
    end 
    end 

    def respond_to? method, private = false 
    super(method, private) || @object.respond_to?(method, private) 
    end 

end 

class Roko < Struct.new(:a, :b, :c) 
end 

# instantiate the proxy instance by giving it the reference to the object in which you don't want nils 
roko = Proxy.new(Roko.new) 

puts roko.a.class # returns String even though :a is uninitialized 
puts roko.a  # returns blank 
0

json.dosage pharmaceutic. dosage.name.to_s

Dies wird nicht funktionieren i Pharma ist Null. Sie können einfach

json.dosage pharmaceutic.dosage.name unless pharmaceutic.dosage.nil? 
Verwandte Themen