所以我在一个应用程序中使用MongoDB,并且我的文档的字段已经增加了,但在我的视图中,我不希望每个属性都有一个if
块,我如何才能使用rails来显示该属性是否存在,否则只是静静地不做任何事情?Ruby,MongoDB,不要抱怨未定义的方法?
例子:
由于蒙戈是无模式的这些数值不会在我的模型的早期实例来定义。
<%= @company.address %>
<%= @company.longitude %>
<%= @company.latitude %>
我该如何处理?
所以我在一个应用程序中使用MongoDB,并且我的文档的字段已经增加了,但在我的视图中,我不希望每个属性都有一个if
块,我如何才能使用rails来显示该属性是否存在,否则只是静静地不做任何事情?Ruby,MongoDB,不要抱怨未定义的方法?
例子:
由于蒙戈是无模式的这些数值不会在我的模型的早期实例来定义。
<%= @company.address %>
<%= @company.longitude %>
<%= @company.latitude %>
我该如何处理?
如果你希望它只是应付,你总是可以实现对类就靠电话和返回自己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
只有当方法可能返回nil
时,Rails的一部分方法才会起作用,但如果未定义该方法,则不会。
我想我想知道的是,所有这些基于文档的ORM都基本没有图式,这不是越来越多人遇到的越来越多的问题吗?很好的答案。 –
我没有对他们做过多的事情,但我敢打赌,你应该使用它们,因为你可能使用'[]'访问器而不是JavaScript方法风格。在JavaScript中,object.arbitrary默认为'null',而在Ruby中,它是一个未定义的方法调用。 – tadman
Mongoid支持field default values。
class Company
include Mongoid::Document
field :address, type: String, default: ""
end
只要你可以安全地将它转换为字符串,视图并不在乎你给它什么。 '<%= (expr) %>'的结果始终是'(expr).to_s',并且足够方便'nil.to_s'返回一个空字符串。 – tadman
是的,并且认为他根本没有服务。他没有任何服务,或者,如果你愿意,没有任何属性。 –
您使用的是MongoDB Ruby驱动程序还是任何种类的ORM? –
嘿乔纳斯,我正在使用Mongoid –