2013-08-01 22 views
5

pharmaceutic.dosage => niljbuilderビューでnullではなく空の文字列を返す方法は?

私のレンダリングJSONは以下のように見えるとき、私は簡単なJBuilderのビュー

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

を持っている:

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

私はいくつかの属性がnilそれであるときに、すべてのJBuilderのビュー用に設定たい空の文字列としてレンダリングする必要があります。

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

これを達成する方法は?

+1

おそらくこれを行うことによって? 'json.dosage pharmaceutic.dosage.name || "dose.name'が' nil'ならばこのオペランドで空文字列を使用します – MrYoshiji

答えて

5

nil.to_s #=> ""ので、あなたは、単に受け入れ答えに拡張するには.to_s

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

これは良い解決策ですが、私は私のすべての500の広告に '' to_s''を書く必要はありません属性。 – tomekfranek

0

を追加することができ、ここではちょうどそれを行うには、単純なプロキシクラスです:

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の薬用。用量。名前.to_s

薬学はゼロです。あなたは簡単に行うことができます

json.dosage pharmaceutic.dosage.name unless pharmaceutic.dosage.nil? 
関連する問題