Rails, как установить временную переменную, а не поле базы данных
Для моего приложения у меня разные точки входа для входа, которые проверяют вещи по-разному.
Таким образом, в главной регистрации ничего не требуется, кроме поля для отправки и отправки по электронной почте. В альтернативном поле регистрации требуется еще много. Поэтому в модели пользователя у меня есть
validate_presence_of :blah, :lah, :foo, :bah, :if => :flag_detected
def flag_detected
!self.flag.nil?
end
Я хочу установить этот флаг через контроллер. Однако этот флаг не является полем базы данных. Мне просто интересно, возможно ли это в Rails или что-то не так с тем, как я думаю об этом? Если да, то какой лучший способ достичь этого? Спасибо.
Ответы
Ответ 1
Вам нужно attr_accessor
class User < ActiveRecord::Base
attr_accessor :flag
attr_accessible :flag # if you have used attr_accessible or attr_protected else where and you are going to set this field during mass-assignment. If you are going to do user.flag = true in your controller action, then no need this line
end
в основном attr_accessor :flag
создайте методы user.flag
и user.flag = ...
для вашей модели.
и attr_accessible
предназначены для защиты от массового присвоения.
Ответ 2
Следуя обсуждению лучшей практики:
Создайте метод, который делает то, что вы хотите. То есть save_with_additional_validation. Это гораздо более понятный и самодокументирующий код и работает одинаково. Просто вызовите этот метод вместо save()
Ответ 3
Кажется, вам нужно определить метод setter
class User < ActiveRecord::Base
attr_accessible :flag
def flag=(boolean)
boolean
end
end