読者です 読者をやめる 読者になる 読者になる

文字列のリンク化などはモデルでやるべきだ

Ruby Rails

いちいちメソッドで呼ぶのではなく、モデルでやったほうが
美しい場合もあります。

require 'uri'
class Schedule < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
  validates_presence_of :user_id
  validates_presence_of :scheduled_date
  validates_presence_of :summary
  validates_presence_of :body
  def url2link_of_body(options={})
    target=options[:target] || '_blank'
    html_string=
      options[:noescape] ? body : CGI::escapeHTML(body)
    URI.extract(html_string).each{|url|
      html_string.gsub!(url,"<a href='#{url}' target='#{target}'>#{url}</a>")
    }
    html_string
  end
end

などと定義すると、bodyカラムの内容のURLを自動的にリンクにしてくれる。

% ./script/runner 'p Schedule.find(1).url2link_of_body'
"<a href='http://foo.bar' target='_blank'>http://foo.bar</a>\r\n&lt;p&gt;実験&lt;/p&gt;"

エスケープをしたくない場合

% ./script/runner 'p Schedule.find(1).url2link_of_body(:noescape=>true)'
"<a href='http://foo.bar' target='_blank'>http://foo.bar</a>\r\n<p>実験</p>"