簡體   English   中英

覆蓋默認的Rails date_select

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM