この質問は単一の列の質問に答えましたが、複数の列に対してどのように答えますか? ユーザーがフォームに入力しない場合に備えて、http を前に付けたい 3 つの列 (website、fb、twitter) があります。
私はこれを試しましたが、うまくいきません:
before_save :sanitize_links
private
def sanitize_links
website = self.website
facebook = self.facebook
twitter = self.twitter
links = [website, facebook, twitter]
links.each do |link|
unless link.include?("http://") || link.include?("https://")
link = "http://" + link
end
end
end
アップデート
KL-7 の提案を試してみましたが、残念ながら少し問題がありました。配列の出力を で使用するにはどうすればよいbefore_save
ですか? 以下のコードを試しましたが、うまくいきません。
before_save :sanitize_links
private
def sanitize_links
links = ["website", "facebook", "twitter"]
links.map! { |link| self.link =~ %r{\Ahttps?://} ? self.link : "http://" + self.link }
end
更新 2
私はあきらめた。3回繰り返します:
before_save :sanitize_links
private
def sanitize_links # prefix user-submitted links with http:// if missing
self.website =~ %r{\Ahttps?://} ? self.website : self.website = "http://" + self.website
self.facebook =~ %r{\Ahttps?://} ? self.facebook : self.facebook = "http://" + self.facebook
self.twitter =~ %r{\Ahttps?://} ? self.twitter : self.twitter = "http://" + self.twitter
end