Подтвердить только тогда, когда - PullRequest
0 голосов
/ 28 апреля 2011

Мне нужно проверить наличие значения, но только ПОСЛЕ значения заполнено. Когда пользователь создан, не требуется устанавливать shortcut_url. Однако, как только пользователь решит выбрать Shortcut_url, он не сможет удалить его, он должен быть уникальным, он должен существовать.

Если я использую validates_presence_of, поскольку shortcut_url не определен, пользователь не создается. Если я использую: allowblank => true, у пользователей может быть "" в качестве ярлыка быстрого доступа, который не следует логике сайта.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Здесь мы всегда следим за тем, чтобы shortcut_url был уникальным, но мы только следим за тем, чтобы он присутствовал, если установлен атрибут shortcut_selected (или если он был установлен и теперь был изменен)

class Account 
  validates_uniqueness_of :shortcut_url
  with_options :if => lambda { |o| !o.new_record? or o.shortcut_changed? } do |on_required|
    on_required.validates_presence_of :shortcut_url
  end

end

You 'Вам нужно будет проверить, чтобы убедиться, что это хорошо работает с новыми записями.

0 голосов
/ 28 апреля 2011

попробуйте условные проверки, что-то вроде:

validates_presence_of :shortcut_url, :if => :shortcut_url_already_exists?
validates_uniqueness_of :shortcut_url, :if => :shortcut_url_already_exists?

def shortcut_url_already_exists?
  @shortcut_url_already_exists ||= User.find(self.id).shortcut_url.present?
end
0 голосов
/ 28 апреля 2011

Попробуйте параметр: allow_nil вместо: allow_blank.Это предотвратит проверку пустых строк.

Редактирование: назначается ли пустая строка для shortcut_url при создании пользователя, тогда?Может быть, попробуйте:

class User < ActiveRecord::Base
  validates_presence_of :shortcut_url, :allow_nil => true

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