Это хак, но вы можете добавить виртуальный атрибут к классу модели, который просто действует как флаг, чтобы указать, должен ли выполняться обратный вызов или нет. Затем действие контроллера может установить флаг. Что-то вроде:
class User < ActiveRecord::Base
before_create :validate_email, :unless => :skip_validation
attr_accessor :skip_validation
def validate_email
...
end
end
class FriendsController < ApplicationController
def create
@user = User.find # etc...
@user.skip_validation = true
@user.save
end
end
Я не совсем уверен, что опция :unless
обратного вызова before_create
может напрямую ссылаться на имя виртуального атрибута. Если это невозможно, вы можете установить для него символ, который является именем метода в вашей модели, и просто заставить этот метод возвращать значение атрибута skip_validation
.