所以我在一個應用程序中使用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 –