2

Ruby onRails3.2.9を使用しています。私のモデルクラスには属性があり、関連するオブジェクトをデータベースに格納する前に、その値(URL、文字列の種類)がない場合は、デフォルトのlinkプロトコルを追加したいと思います(プロトコルの例は、、、、、など。デフォルトは)です。それを実現するために、正規表現を使用して、おそらくURI Rubyライブラリを使用してRailsコールバックを実装することを考えていますが、その実装方法に問題があります。http://https://ftp://ftps://http://

何か案が?どうすれば/私はそれを作ることができますか?

4

2 に答える 2

1

単純な正規表現置換を使用するのはどうですか?

class String
  def ensure_protocol
    sub(%r[\A(?!http://)(?!https://)(?!ftp://)(?!ftps://)], "http://")
  end
end

"http://foo".ensure_protocol # => "http://foo"
"https://foo".ensure_protocol # => "https://foo"
"ftp://foo".ensure_protocol # => "ftp://foo"
"ftps://foo".ensure_protocol # => "ftps://foo"
"foo".ensure_protocol # => "http://foo"
于 2012-12-26T15:52:56.397 に答える
0

before_validationコールバックは、開始したい場所である可能性があります

class YourModel < ActiveRecord::Base

  PROTOCOLS = ["http://", "https://", "ftp://", "ftps://"]
  validates_format_of :website, :with => URI::regexp(%w(http https ftp ftps))
  before_validation :ensure_link_protocol

  def ensure_link_protocol
    valid_protocols = ["http://", "https://", "ftp://", "ftps://"]
    return if link.blank?
    self.link = "http://#{link}" unless PROTOCOLS.any?{|p| link.start_with? p}
  end

end
于 2012-12-26T16:03:16.037 に答える