ruby-on-rails - 如果 Rails 中的属性发生更改,则验证更新

标签 ruby-on-rails

我有一个名为:Invitation with cols: name, email

用户表有 2 列:电子邮件、辅助电子邮件

用户 A 想邀请用户 B 成为好友。 如果 A 已经通过电子邮件邀请了 B,那么如果 A 再次通过 secondary_email 邀请 B,则会抛出错误:已通过另一封电子邮件邀请。 编写验证并正常工作。

问题是:如果我更新 B 的 secondary_email 中已经存在的一些邀请,它不会抛出任何错误。

validate :is_already_invited?,
       on: :update,
       if: :email_changed?

validate :is_already_invited?,
       on: :create

def is_already_invited?
  user = User.where(secondary_email: self.email).first
  if user
    self.inviter.friendships.each do |friendship|
      friendship.errors[:email] = "is already invited under different email address." if (friendship.email = user.email)
    end
  end
end

如果电子邮件发生更改,如何使模型在更新时验证。

谢谢

最佳答案

validate :is_already_invited?, on: :update

    def is_already_invited?
        if email_changed?
          user = User.where(secondary_email: self.email).first
          if user
            self.inviter.friendships.each do |friendship|
              friendship.errors[:email] = "is already invited under different email address." if (friendship.email = user.email)
            end
          end
        end
    end

关于ruby-on-rails - 如果 Rails 中的属性发生更改,则验证更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39913455/

相关文章:

ruby-on-rails - Heroku:如何在 "git pull"之后到 'git push -f'

ruby-on-rails - 如何在 _integration_ 测试中设置引用者

ruby-on-rails - FakeFS 和 Rspec 与 Rspec 和真实文件系统不一致

ruby-on-rails - Ruby 中无替换的随机采样

ruby-on-rails - 我的 Rails Javascript list 文件既不编译也不包含任何必需的文件

ruby-on-rails - 对属性的Tire/Elasticsearch过滤

ruby-on-rails - 连接()失败(111 : Connection refused) while connecting to upstream

ruby-on-rails - 在 CentOS 6 上安装 pg gem

ruby-on-rails - 有没有一种优雅的方法可以更正加拿大邮政编码中常见的数据输入错误?

ruby-on-rails - Ruby on Rails 中使用破折号 `-` 而不是下划线 `_` 的路由