What have you found for these years?

2008-06-18

Inside Rails (2)

Bug #34 auto_link
06/18/2008 05:29 PM - godfat 真常

其實這也是我很討厭 rails 的一點:
什麼東西都 include 就對了!
事實上,不 include 反而會不行,
因為他們都是寫成 instance method!

我是覺得這很沒必要。helper 都應該用 module_function 才對。

所以說,如果放棄 rails 的那些 tag_option,
或是說,修改 rails 的 helper 成為 module_function?
那初步測試這樣可行:

require 'auto_link_content'
require 'xhtml_formatter'

class Article < ActiveRecord::Base
include AutoLinkContent
self.auto_link_function = XhtmlFormatter.method(:format_article)
auto_link_field :content
end


我相信這樣彈性應該很大,可以再擴充為對任意 field 做 filter.
如果要用 rails 的 tag_option 的話,可能會變成:

require 'auto_link_content'
require 'drupal_filter_url'

class Article < ActiveRecord::Base
include AutoLinkContent
include DrupalFilterUrl
auto_link_method :__filter_url
auto_link_field :content
end


也就是說,強迫你 include 一堆東西到 model 裡面。
include 一堆東西進來的危險,首當其衝的當然就是名稱衝突。
這跟濫用多重繼承的動作,其實是類似的...
ruby 的 mixin 其實比 multiple inheritance 還要強大哩。

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0