Ruby でインスタンスの属性のメソッドをどのように定義しますか?
HtmlSnippet
Rails の ActiveRecord::Base を拡張し、属性を持つというクラスがあるとしますcontent
。replace_url_to_anchor_tag!
そして、そのメソッドを定義して、次の方法で呼び出したいと思います。
html_snippet = HtmlSnippet.find(1)
html_snippet.content = "Link to http://stackoverflow.com"
html_snippet.content.replace_url_to_anchor_tag!
# => "Link to <a href='http://stackoverflow.com'>http://stackoverflow.com</a>"
# app/models/html_snippet.rb
class HtmlSnippet < ActiveRecord::Base
# I expected this bit to do what I want but not
class << @content
def replace_url_to_anchor_tag!
matching = self.match(/(https?:\/\/[\S]+)/)
"<a href='#{matching[0]}'/>#{matching[0]}</a>"
end
end
end
String クラスのインスタンスと同様content
に、String クラスの再定義も 1 つのオプションです。しかし、それは String のすべてのインスタンスの動作を上書きするため、私はそれを実行したくありません。
class HtmlSnippet < ActiveRecord::Base
class String
def replace_url_to_anchor_tag!
...
end
end
end
何か提案はありますか?