2016-04-27 16 views
0

私のユーザーは自分のウェブサイト、Facebook、およびTwitterのURLをプロフィールに追加することができます。Ruby on rails。存在しない場合はfacebook.com/をURLに追加してください

完全なURL(http://www.facebook.com/USERNAME)またはURLの一部を入力するようにしたいとします。 www.facebook.com/ USERNAMEまたはUSERNAMEと入力し、必要に応じてhttps://facebook.com/を自動的に追加してください。私は、httpをしたい://は、のように入力されたURLは、私が持っているウェブサイトのURLのために自分のウェブサイト/ログインfacebookなど

に直接リンクされます:

before_validation :add_url_protocol 

def add_url_protocol 
    if self.website && !url_protocol_present? 
    self.website = "http://#{self.website}" 
    end 
end 

def url_protocol_present? 
    self.website[/\Ahttp:\/\//] || self.website[/\Ahttps:\/\//] 
end 

さらに正規表現検証は、次にあります。 これは正常に動作します。

私は正規表現についてのアイデアはあまりなく、このbefore_validationコードにfacebook.com/の部分を追加する方法は不明です。

ご協力いただきありがとうございます。

UPDATE:

def add_url_protocol 
    if self.website && !url_protocol_present? 
    self.website = "http://#{self.website}" 
    end 
    if self.facebook && !url_facebook_present? 
    self.facebook = "http://facebook.com/#{self.facebook}" 
    end 
end 

これはほとんど作品。ユーザーがUSERNAMEを入力した場合、出力は良好です。ユーザ入力がUSERNAMEをwww.facebook.com/場合、出力に含まあなたがActiveModel::Modelを含むことにより、使用して独自のロールか何かを使用することができ、http://facebook.com/www.facebook.com/USERNAME

+0

あなたは「self.website = "http://facebook.com/#{self.username}" 'と混同しましたか? –

+0

ほとんどの場合、ユーザーがwww.facebook.com/USERNAMEを入力すると、出力はhttp://www.facebook.com/www.facebook.com/USERNAMEになります –

答えて

1

形モデルでユーザーの入力を収集することですこれを行うための最善の方法となりますReformのように。あなたが行うことができます 最も簡単な方法は、単純に「/」で区切って自分のFacebookのユーザー名を含む文字列としての入力を処理されるので、何でも、彼らはあなたが

"https://www.facebook.com/their.username".split('/')[-1] # 'their.username' 
"www.facebook.com/their.username".split('/')[-1] # 'their.username' 

"their.username".split('/')[-1] # 'their.username' 

でユーザ名を取得することができ、入力した文字列は、単にあなたにユーザー名属性を宣言しますセッターを上書きしてFacebookのユーザー名を抽出します。次に、あなただけのデータベースにFacebookのユーザー名を保存し、方法など

def facebook_profile_url 
    "www.facebook.com/#{fb_username}" 
end 

冗長FacebookのURLの一部を保持する必要はありませんを記述します。

+0

私はまだこれをテストしていますが、うまくいくと思います。 –

+0

.split( '/')[ - 1]はうまくいくようです。私は入力のための正規表現の検証があるので、私は変数fb_username = self.facebook..split( '/')[ - 1]を作成します。検証後、私は新しい変数の前に完全なURLを置き、self.facebookとして保存します –

0

私はあなたが括弧を使用してキャプチャグループを作成することができます

match = /^(https?:\/\/)?((www\.)?facebook\.com)?(.*)/.match(self.website) 
self.website = match[1] || 'http://' 
self.website << match[2] || 'facebook.com' 
self.website << match[3] 

をしようとするだろう。 ?それからあるように、グループまたはcharそれがオプションである前に(私はあなたのプロトコルの検索を凝縮することができました)

あなたは試合配列に私のインデックスをチェックする必要があるかもしれません...

申し訳ありませんが、これはテストされていないことを意味し電話...

関連する問題