Rails, как установить временную переменную, которая не является полем базы данных - PullRequest
15 голосов
/ 14 марта 2012

Для моего приложения у меня есть разные точки входа в систему, которые проверяют вещи по-разному.

Так что при основной регистрации ничего не требуется, кроме поля электронной почты и пароля. В альтернативном поле регистрации требуется гораздо больше. Так в пользовательской модели у меня

validate_presence_of :blah, :lah, :foo, :bah, :if => :flag_detected

def flag_detected
  !self.flag.nil?
end

Я хочу установить этот флаг через контроллер. Однако этот флаг не является полем базы данных. Мне просто интересно, достижимо ли это в Rails или что-то не так с тем, как я об этом думаю? Если так, каков наилучший способ достичь этого? Спасибо.

Ответы [ 3 ]

28 голосов
/ 14 марта 2012

Вам нужно: 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's action, then no need this line
end

в основном attr_accessor :flag создать методы user.flag и user.flag = ... для вашей модели.

и attr_accessible для массызащита назначения.

3 голосов
/ 04 мая 2012

В продолжение дискуссии о передовой практике:

Создайте метод, который будет делать то, что вы хотите.Т.е. save_with_additional_validation.Это гораздо более понятный и самодокументированный код и работает так же.Просто вызовите этот метод вместо save ()

1 голос
/ 14 марта 2012

Кажется, вам нужно определить метод установки

 class User < ActiveRecord::Base
   attr_accessible :flag

   def flag=(boolean)
     boolean
   end
 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...