氣死人 rails 規則又不統一
碰到蠢問題,active_support 說:
'quota'.pluralize # => 'quotas'
而 extlib 則說:
'quota'.pluralize # => 'quotum'
所以當我捨棄 aquarium 的 hook 取 extlib 的 hook 後,
class Quota 的 table_name 變成 'quotum' ...
fine, 那我們用 rails 的 inflection 來改變規則吧。
當然,根本的問題是出在不該 require 'extlib/inflection',
所以我後來也把:
config.gem 'extlib', :version => '>=0.9.5', :lib => 'extlib'
改成:
config.gem 'extlib', :version => '>=0.9.5', :lib => 'extlib/assertions'
config.gem 'extlib', :version => '>=0.9.5', :lib => 'extlib/hook'
但是,心裡想著既然 quota 的 pl. 是 quotum, 那把 rails 改過來也沒什麼不好?
於是加上了:
ActiveSupport::Inflector.inflections do |inflect|
inflect.plural 'quota', 'quotum'
end
結果這下可好,當你說:
user.quotum 時,rails 居然去找 Quotum 這個 class!
也發現不能只寫 quota 的 plural 是 quotum, singular 也要自己寫一次!
因為現在這樣的話,寫:
'quotum'.classify # => 'Quotum'
而加上:
inflect.singular 'quotum', 'quota' # stupid rails
後,才能正常顯示:
'quotum'.classify # => 'Quota'
你告訴我哪個字是 singular 和 plural 沒有一對一 mapping 的 @@
我猜應該是有啦... 但那應該是不同意思的字吧?而且應該很少數吧?
extlib 可是一行就搞定:
Extlib::Inflection.plural_rule 'quota', 'quotas'
上面這行是原本為了讓 DataMapper 去對應 rails 寫的,
現在要讓 rails 去對應 DataMapper 就沒有用到了。
但光是這樣也是沒有用的! user.quotum 還是去找 Quotum!
source code 看半天,不知道他內部到底是玩什麼花招?
看到覺得很煩,只好乾脆再加上:
has_many :quotum, :order => 'date DESC',
:dependent => :destroy, :class_name => 'Quota' # stupid rails
這樣總行了吧??結果還真的是要這樣才行。
既然都有 classify 了,遵照那個規則不行嗎...
我看他那 source code, 只看到 name.camelize,
這個意思是 has_many :users 也應該去看 Users 而不是 User,
不知道到底是哪裡還有 magic, 我懶得追蹤了...
反正改用 DataMapper 是勢在必行啊啊啊啊。
跟 rails 底層打交道只會浪費時間而已...
7 retries:
'quota'.pluralize # => 'quotum' 應該是bug,因為-um是單數,-a是其對應的複數。
啊!謝謝!
看來那時候沒細查 XD
(還有英文不好 :s)
這和英文無關,那是拉丁文來的字才會有這樣怪異的單複數 XD
..XD
那拉丁文不好 XD
之前 godfat 還說喜歡拉丁文的
不好是不擅長的意思
not good at
Post a Comment
Note: Only a member of this blog may post a comment.