[英]Overriding default Rails date_select
所以我想要做的是覆蓋默認的date_select方法(我想做一個'可選/未指定的'日期輸入)。 到目前為止我嘗試過的是:
ActionView::Helpers::DateHelper::DateTimeSelector.class_eval do
def build_selects_from_types(order)
select = ''
order.reverse.each do |type|
separator = separator(type) unless type == order.first # don't add on last field
select.insert(0, separator.to_s + send("select_#{type}").to_s)
end
select.insert(0, '<p>HI!!</p>') # or whatever...
select.html_safe
end
end
然后我在environment.rb的底部要求'覆蓋'但是在啟動WEBrick時我收到此錯誤:
〜/ .rvm / gems / ruby-1.9.2-p0 / gems / activesupport-3.0.0 / lib / active_support / dependencies.rb:479:在`load_missing_constant'中:ActionView :: Helpers沒有丟失常量DateTimeSelector! (引發ArgumentError)
所以我顯然不知道自己在做什么,但至少嘗試這似乎是一件合理的事情。
上面的錯誤似乎暗示它找不到DateTimeSelector類,但我已經看到了〜/ .rvm / gems / ruby-1.9.2-p0 / gems / actionpack-3.0.0 / lib / action_view中的代碼/helpers/date_helper.rb我認為我的模塊層次結構正確。 是因為它是一個私有的Rails類嗎?
歡迎任何想法:)
在Ruby中不存在私有類的概念。 課程從不私密。
出錯的原因是路徑無效。 它應該是
ActionView::Helpers::DateTimeSelector
不
ActionView::Helpers::DateHelper::DateTimeSelector
順便說一下,你要做的事情絕對是一個壞主意。 事實上,Ruby為您提供了重新打開類和“補丁”方法的能力,但這並不意味着您應該為這種類型的自定義執行此操作。
你永遠不應該把這些機會帶到Rails代碼庫,除非你真的知道你在做什么。 風險是打破依賴於這種方法的事情。
正確的方法是定義一個新的幫助器並構建自己的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.