Ruby, MongoDB, не жалуетесь на неопределенные методы? - PullRequest
1 голос
/ 18 октября 2011

Так что я использую MongoDB в приложении, и поля для моих документов расширились, но, на мой взгляд, я не хочу, чтобы у каждого атрибута был блок if, как я могу просто показать рельсызначение атрибута, если он существует, иначе просто тихо ничего не делать?


Пример:

Поскольку Mongo не имеет схемы, эти значения не будут определены в более ранних случаях моегомодели.

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

Как мне справиться с этим?

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Если вы хотите, чтобы он просто справлялся, вы всегда можете реализовать свой собственный 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, но не если метод не определен.

1 голос
/ 18 октября 2011

Mongoid поддерживает значения поля по умолчанию .

class Company
  include Mongoid::Document
  field :address, type: String, default: ""
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...