У меня есть класс, который выглядит так:
class SearchService
include Mongoid::Document
key :name, String
field :url, String
field :searchBaseUrl, String
validates_presence_of :name, :url, :searchBaseUrl
validates_uniqueness_of :name
end
Первая проблема заключается в том, что я использовал validates_presence_of
неправильно, или так может показаться. Я прокомментировал строку, и я мог создать экземпляр класса на консоли без проблем. Но когда я попытался создать объект с validates_presence_of на месте, я получил ошибку:
NoMethodError: undefined method `delete' for String:Class
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/fields.rb:230:in `add_field'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/fields.rb:145:in `field'
Является ли это сообщение об ошибке значимым? Мне трудно увидеть взаимосвязь между отсутствующим методом в классе String и тем, что я неправильно использую validates_presence_of
. Если бы я мог выбрать только одну вещь в Ruby, которая меня беспокоит, это были бы ужасные сообщения об ошибках.
Документы rails говорят, что validates_presence_of предназначен для ассоциации. Но на странице mongo db написано, что она используется для обязательных полей. Документы mongodb неверны?
Я пытаюсь решить, является ли это проблемой, о которой я должен сообщить команде mongoid, или я просто не понимаю, как работает язык.
Обновление : ОК, теперь я получаю очень похожую ошибку в классе, который вообще не использует validates_presence_of. Так что это какая-то другая проблема (хотя комментирование этой строки исправило ее изначально).
Update2 : Мне кажется, это ошибка в mongoid. Изменение этой строки:
field :name
в
field :name, String
приведет к появлению ошибки. Кажется, что любое поле, определенное с типом, испортит mongoid. Или их там больше не должно быть? Документы mongodb (см. Ссылку выше) имеют код, который выглядит как key :votes, Integer, :default => 0
, поэтому, если он недействителен, документы не верны.
Rails 3.1.1, Ruby 1.9.3