Ruby,MongoDB,不抱怨未定义的方法?

时间:2011-10-18 19:02:52

标签: ruby-on-rails ruby mongodb

所以我在一个应用程序中使用MongoDB,我的文档的字段已经增长但在我的视图中我不希望每个属性都有一个if块,我怎么能有rails只显示属性的值,如果它存在,否则只是静静地什么都不做?


示例:

由于Mongo是无模式的,因此我的模型的早期实例中不会定义这些值。

<%= @company.address %>
<%= @company.longitude %>
<%= @company.latitude %>

我该如何处理?

2 个答案:

答案 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方法才有效,但如果方法未定义则不行。