2015-01-08 5 views
0

Я использую жемчужину strong_parameters в моем проекте рельсов. Чтобы применить это ко всем моделям, я создал инициализатор и поставлю код ниже.Как добавить за исключением инициализатора?

ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection) 

Теперь я не хочу применять его для модели под названием голосов. пожалуйста, помогите мне исключить эту модель?

+0

Вы можете применить этот [взломать] (http://stackoverflow.com/a/2088389/2767755). –

ответ

0

Я бы предложил вам включить module для каждой модели. То, что вы делаете, - это исправление обезьян ActiveRecord, что не очень хорошая идея.

UPDATE

Вот решение, в котором вы можете включить только ActiveModel::ForbiddenAttributesProtection для моделей, которые вы любите. Поместите код в инициализатор.

all_models = Dir["#{Rails.root}/app/models/**/*.rb"].map do |filename| 
    filename[/(?<=models\/).*(?=\.rb)/].camelize.constantize 
end 

models_without_forbidden_attributes_protection = [Foo] # put your filtered classes here 

all_models.each do |model| 
    unless models_without_forbidden_attributes_protection.include?(model) 
    model.send(:include, ActiveModel::ForbiddenAttributesProtection) 
    end 
end 
+0

для проектов небольшого размера это нормально. Но если проект содержит более 100 моделей, это не очень хороший выбор. –

+0

Неплохо бы просто перебрать все ваши модели и включить их для них? – hakcho

+0

нельзя ли исключить один класс? –

Смежные вопросы