我有简单的jbuilder视图
json.id pharmaceutic.id
json.name pharmaceutic.name
json.dosage pharmaceutic.dosage.name
pharmaceutic.dosage => nil
我渲染的json如下所示:
{"id":1,"name":"HerzASS ratiopharm","dosage":null}
我想为所有jBuilder视图设置当某个属性为nil
时,它应该呈现为空字符串。
{"id":1,"name":"HerzASS ratiopharm","dosage":""}
如何实现?
答案 0 :(得分:5)
nil.to_s #=> ""
因此,您只需添加.to_s
json.id pharmaceutic.id
json.name pharmaceutic.name.to_s
json.dosage pharmaceutic.dosage.name.to_s
答案 1 :(得分: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
答案 2 :(得分:0)
json.dosage pharmaceuticalic.dosage.name.to_s
如果药物为零,这将无效。你可以简单地做到
json.dosage pharmaceutic.dosage.name unless pharmaceutic.dosage.nil?