Я использую Ruby on Rails 3 и пытаюсь построить ActiveModel таким образом :
module Users # I use a namespace
class Account
extend ActiveModel::Naming
extend ActiveModel::Translation
include ActiveModel::Validations
attr_accessor :name
attr_reader :errors
def initialize
@errors = ActiveModel::Errors.new(self)
end
def validate!
errors.add(:name, "can not be nil") if name == nil
end
# The following methods are needed to be minimally implemented
def read_attribute_for_validation(attr)
send(attr)
end
def Account.human_attribute_name(attr, options = {})
attr
end
def Account.lookup_ancestors
[self]
end
def persisted?
false
end
end
Если в моем контроллере я делаю это
def create
@account = Users::Account.new
@account.errors.add( :name, "can not be blank" )
...
end
Я получаю эту ошибку:
undefined method `add' for nil:NilClass
Если я сделаю
@new_account = Users::Account.new
, отладка @new_account
будет
--- !ruby/object:Users::Account
id:
name:
surname:
updated_at:
Где находитсяошибка и как я могу это решить?
PS: я не хочу использовать validate_presence_of
, потому что мне нужен другой процесс проверки, но я думаю, что и этот метод неработа.
Если я использую метод validate!
, я получаю следующую ошибку, которая относится к этому
NoMethodError in Users/accountsController#create
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]=
Application trace
pp/models/users/account.rb:16:in `validate!'