2010-05-17 2 views
6

У меня есть оператор validate_on_create в одном из моих контроллеров, который я хотел бы пропустить все мои данные семени. Каковы некоторые решения, так что инструкция create в моем файле семени пропускает эту проверку. Мое текущее решение комментирует валидацию каждый раз, когда я запускаю rake db: seed. Что-нибудь еще более умное?Ruby on Rails: утверждение «validate_on_create» для семян

ответ

5

Вы рассматривали добавление атрибута в модели, которая проверяется в методе validate_on_create?

Пример:

class MyModel < ActiveRecord::Base 

    attr_accessor :skip_on_create_validation 

    def validate_on_create 
    unless skip_on_create_validation 
     # do validation 
    end 
    end 

end 

# In db/seeds.rb 
MyModel.create(:skip_on_create_validation => true, ......) 
+1

Есть ли Rails 4 эквивалент этого? Я думаю, что 'validate_on_create' устарел, не так ли? –

4

Вы можете пропустить проверки, позвонив по вашим model.save(false), если вы не загружаете их через приспособления.

+2

Но я использую функцию в файле семян создать. Вы предлагаете, чтобы я этого не делал? – JackCA

+0

поэтому вместо 'create' использовать функцию 'build' –

+0

это Rails 3, и это для создания одного объекта не несколько. –

1

Вы можете явно пропустить все проверки при сохранении объекта, вызвав object.save(false).

Например:

# In your model 
def validate_on_create 
    # An example validation - replace with whatever you like 
    return true unless name.blank? 
end 

# In db/seeds.rb 
# Create a new person 
p = Person.new(:name => 'Bob') 
# Save the record to the database, and *skip validation* 
p.save(false) 
+0

Я знаю об этом, но я бы хотел использовать его с помощью 'Model.create' вместо' Model.save (false) ' –

+0

Невозможно пропустить проверки при вызове' object.create'. Почему бы просто не вызвать 'object.save (false)'? – nfm

+2

потому что я создаю много таких объектов: 'models = Model.create ([{: name =>" Имя "}, {: name =>" Второе имя "}])' –