Rails 3.1 - find_or_create_by не сохраняется - PullRequest
1 голос
/ 17 января 2012

У меня есть этот код ...

    recipient = User.find_or_create_by_email(params[:recipient_email],
        { :password => 'password',
        :password_confirmation => 'password',
        :first_name => 'First',
        :last_name => 'Last',
        :active => false })

, который не работает. Получатель не сохраняется в базе данных, как это должно быть. Однако это ...

    recipient = User.find_or_create_by_email(params[:recipient_email],
        { :password => 'password',
        :password_confirmation => 'password',
        :first_name => 'First',
        :last_name => 'Last'})

работает в том смысле, что создает получателя и сохраняет его в базе данных, но теперь для флага: active установлено значение true по умолчанию.

В модели User у меня есть ...

attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :active

и

validates :active, :presence => true

Есть идеи, что здесь происходит?

1 Ответ

1 голос
/ 17 января 2012

Ваш :active имеет значение true или false (или nil, если вы не определили значение по умолчанию в своем файле миграции). Может быть, ложь интерпретируется как отсутствие, я действительно не знаю. НО вот как бы я это сделал:

Поместите t.boolean :active, :default => false в свой файл (или, если вам нужно создать миграцию, выполните change_column :table, :active, :boolean, :default => false), а затем удалите проверку.

Каждый пользователь теперь сохраняется как ложный, если вы не укажете параметр с другим значением. Если большинство ваших пользователей должны быть правдивыми (то есть, в целом, но наоборот), измените это так. Это делает вашу проверку ненужной.

Надеюсь, я понял твою проблему ... в противном случае, игнорируй меня.

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