ruby-on-rails - 如何使用 Rails 创建复杂且唯一的?

标签 ruby-on-rails ruby-on-rails-3

我必须使包含 http 链接的字段在 Rails 模型中保持唯一。除此之外,我还想拒绝链接变体,例如:

  • 如果我在 http 地址存在时尝试插入 httpS 地址
  • 如果我尝试插入带参数的链接,而存在另一个不带参数或不同的链接

我发现这个链接可能表明我的问题的答案,但我希望我可以直接在索引中执行此操作,因为我的情况不会随着时间的推移而改变。

In Rails, How do I validates_uniqueness_of :field with a scope of last 6 months

没有必要提供确切的答案,因为我对正则表达式有一些经验。一个不同的例子或引用已经很棒了,因为我找不到任何东西

最佳答案

类似这样的事情可以为您提供第一步:

require 'uri'

class Link < ActiveRecord::Base
  attr_accessor :link

  validate :check_link_integrity
  validates :url, uniqueness: true
  before_save :parse_link

  def check_link_integrity
    begin
      URI::parse(self[:link])
      return true
    rescue URI::InvalidURIError => e
      return false
    end
  end

  def parse_link
    uri_link = URI::parse( self.attributes.delete(:link) )
    self.url = uri_link.host + uri_link.path
    self.protocol = uri_link.scheme
    self.parameters = uri_link.query
  end

  def to_s
    "#{protocol}://#{url}?#{parameters}"
  end

end

URI 模块文档:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html

关于ruby-on-rails - 如何使用 Rails 创建复杂且唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126282/

相关文章:

ruby-on-rails - 在 Rails 应用程序中将 excel 导入到 sqlite

ruby-on-rails - Ruby-OpenID:需要来自 OpenID 提供商的电子邮件地址

ruby-on-rails - Belongs_to 在 Rails 5 中的存在不起作用

ruby-on-rails - 如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个 Elastic Beanstalk 环境?我正在使用 Rails 5

ruby-on-rails - 如何在使用虚拟属性时添加错误消息

ruby-on-rails - 如何开始在 Rails 中进行单元测试?

ruby-on-rails - 如何将登录表单放在 Devise 和 Rails 的标题中

Rails 3.1 Asset Pipeline 中的 Javascript 文件

php - 一个用户数据库,不同服务器上的两个应用程序

ruby-on-rails - 无方法错误 : undefined method `mock' with Mocha and Rails 3