相关疑难解决方法(0)

如何在Ruby on Rails中验证一对id的唯一性?

假设在Ruby中进行以下数据库迁移:

    create_table :question_votes do |t|
      t.integer :user_id
      t.integer :question_id
      t.integer :vote

      t.timestamps
    end

进一步假设我希望DB中的行包含唯一(user_id,question_id)对.为了实现这一目标,在模型中投入的正确粉尘是什么?

validates_uniqueness_of :user_id, :question_id
似乎只是通过用户ID使行唯一,并且通过问题ID使其唯一,而不是由对唯一.

validation model ruby-on-rails unique-constraint

50
推荐指数
5
解决办法
3万
查看次数

Rails 3:验证组合值

在Rails 2.x中,您可以使用验证来确保您具有如下所示的唯一组合值:

validates_uniqueness_of :husband, :scope => :wife
Run Code Online (Sandbox Code Playgroud)

在相应的迁移中,它可能如下所示:

add_index :family, [:husband, :wife], :unique => true
Run Code Online (Sandbox Code Playgroud)

这将确保丈夫/妻子组合在数据库中是唯一的.现在,在Rails 3中,验证语法发生了变化,范围属性似乎消失了.它现在看起来像:

validates :husband, :presence => true
Run Code Online (Sandbox Code Playgroud)

知道如何在Rails 3中实现组合验证吗?Rails 2.x验证仍然可以在Rails 3中使用,所以我仍然可以使用第一个示例,但它看起来很"旧",有更好的方法吗?

validation ruby-on-rails database-integrity validates-uniqueness-of ruby-on-rails-3

40
推荐指数
1
解决办法
2万
查看次数

验证两列的唯一性

我试图验证我的用户模型中两列是唯一的.我搜索了谷歌,根据我的理解,下面的代码不起作用:

validates :login, :uniqueness=>true
validates :email, :uniqueness=>true
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这样做将验证电子邮件的唯一性,但不会验证登录的唯一性.我设置登录必须在数据库上是唯一的.但是,如果它已经存在,那么所有这一切都会产生运行时错误.我不希望生产中出现错误,因为它会导致500内部服务器错误,用户不会理解.

关于如何验证这两个领域的独特性的任何想法?

使用认证:

  • 可以可以
  • 设计
  • 设计无敌

更新:

据我所知,问题是由Devise引起的,特别是验证电子邮件和密码的可验证模块.

更新2:

从Devise中删除可验证模块将导致既不检查唯一性.

更新3:

似乎设计不会导致问题.相反,一个名为Devise Invitable的宝石就是.删除此gem会导致验证被触发.此宝石似乎也试图强制验证电子邮件字段.由于这个宝石的性质,它是有道理的,但不应该阻止.

ruby devise ruby-on-rails-3

1
推荐指数
1
解决办法
1743
查看次数