所以我在一个应用程序中使用MongoDB,我的文档的字段已经增长但在我的视图中我不希望每个属性都有一个if
块,我怎么能有rails只显示属性的值,如果它存在,否则只是静静地什么都不做?
示例:
由于Mongo是无模式的,因此我的模型的早期实例中不会定义这些值。
<%= @company.address %>
<%= @company.longitude %>
<%= @company.latitude %>
我该如何处理?
答案 0 :(得分:1)
Mongoid支持field default values。
class Company
include Mongoid::Document
field :address, type: String, default: ""
end
答案 1 :(得分:1)
如果您希望它能够应对,您可以在该类上实现自己的method_missing
,只需要调用并返回nil
:
class Company
def method_missing(*args)
nil
end
end
这可以解决地毯下的一些问题,所以你在做这类事情时可能要小心。
您还可以制作一个允许您执行此操作的扩展程序:
= @company.try_method(:address)
如果您在初始化程序中添加此方法,如果没有nil
方法,则会返回address
:
class Object
def try_method(method, *args)
respond_to?(method) ? send(method, *args) : nil
end
end
只有方法可以返回try
时,属于Rails的nil
方法才有效,但如果方法未定义则不行。