Этот ответ предназначен для дополнительных вопросов, заданных в комментариях к вопросу.
Вы не сможете вызвать значение по умолчанию find_or_create_by_name
, если переопределите этот метод. Но вы можете реализовать свой собственный, как показано ниже:
def self.find_or_create_by_name(*args)
options = args.extract_options!
options[:name] = args[0] if args[0].is_a?(String)
case_sensitive = options.delete(:case_sensitive)
conditions = case_sensitive ? ['name = ?', options[:name]] :
['UPPER(name) = ?', options[:name].upcase]
first(:conditions => conditions) || create(options)
end
Теперь вы можете вызвать переопределенный метод следующим образом:
User.find_or_create_by_name("jack")
User.find_or_create_by_name("jack", :case_sensitive => true)
User.find_or_create_by_name("jack", :city=> "XXX", :zip => "1234")
User.find_or_create_by_name("jack", :zip => "1234", :case_sensitive => true)