Tag: 覆盖

覆盖默认的Rails date_select

所以我想要做的是覆盖默认的date_select方法(我想做一个’可选/未指定的’日期输入)。 到目前为止我尝试过的是: LIB / overrides.rb 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, ‘HI!!’) # or whatever… select.html_safe end end 然后我在environment.rb的底部需要’覆盖’但是在启动WEBrick时我收到此错误: 〜/ .rvm / gems / ruby​​-1.9.2-p0 / gems / activesupport-3.0.0 / lib / […]

Ruby类方法与特征类中的方法

类的本征类(或元类)中的类方法和方法只有两种方法来定义一个东西吗? 否则,有什么区别? class X # class method def self.a “a” end # eigenclass method class << self def b "b" end end end Xa和Xb表现有何不同? 我认识到我可以通过打开本征类来覆盖或别名类方法: irb(main):031:0> class X; def self.a; “a”; end; end => nil irb(main):032:0> class X; class < # irb(main):033:0> Xa => “a” irb(main):034:0> Xb => “a” irb(main):035:0> class X; class < nil […]

覆盖控制器中的protect_from_forgery策略

我想用两种不同的protect_from_forgery策略构建一个rails应用程序:一个用于Web应用程序,另一个用于API。 在我的应用程序控制器中,我有这行代码: protect_from_forgery with: :exception为了防止CSRF攻击,它工作得很好。 在我的API命名空间中,我创建了一个从我的应用程序控制器inheritance的api_controller,它是API命名空间中所有其他控制器的父类,我用以下代码修改了上面的代码: protect_from_forgery with: :null_session 。 遗憾的是,我在尝试发出POST请求时出错:“无法validationCSRF令牌的真实性”。 我不想跳过我的API控制器中的verify_authenticity_token方法,我只想在我的应用程序中有两个不同的策略,那么如何覆盖我的应用程序控制器中定义的protect_from_forgery策略? 编辑 :好的,所以我最终做了我最初不想做的事情:改变我的api_controller的inheritance:它现在inheritance自ActionController :: Base,而不再是我的应用程序控制器。 它现在可以工作但是: 它没有回答我的问题,即覆盖protect_from_forgery策略。 它不是DRY,因为我必须复制/覆盖之前在我的application_controller中的内容。 所以,如果有人有真正的方法来覆盖这种方法,我会很感激。

如何覆盖Rails模型中的列?

我有一个我的数据库表的模型。 我想覆盖该特定表的列名。 我怎么做到这一点。 例如,让我的表被称为DUMMY,它有一个名为col_a列 col_a 20 34 42 23 12 我会做@dummy.col_a 。 现在这个方法应该返回0表示以0结尾的数字,对于其他一切,它应该返回原始值。 我可以通过定义一个新方法来做到这一点,但我想覆盖列名本身。 请帮忙。

如何 – 没有inheritance – 覆盖类方法并从新方法中调用原始方法?

我找到了一个成功覆盖Time.strftime源代码,如下所示: class Time alias :old_strftime :strftime def strftime #do something old_strftime end end 麻烦的是, strftime是一个实例方法。 我需要覆盖Time.now – 一个类方法 – 在任何调用者获取我的新方法的同时,新方法仍然调用原始的.now方法。 我看过alias_method并没有成功。

从另一个gem覆盖gem内部的方法

好吧,我有一个我正在研究的rails gem,我希望它覆盖sprockets中的特定方法。 我想要覆盖的方法是: Sprockets :: Base.digest,以便在编译应用程序的资产时我可以将指纹从我的gem版本中删除 。 我该怎么做呢? 在我的gem中,我创建了一个文件lib / sprockets / base.rb并放置以下代码: class Sprockets :: Base def摘要 @digest = digest_class.new.update(MyGem :: VERSION) @ digest.dup 结束 结束 当我运行bundle exec rake assets:precompile我得到: undefined method ‘logger=’ for # 因此,在我看来,整个类在某种程度上被覆盖(这会失去它,以及其他方法),而不是仅仅覆盖一个方法。 如果我将代码片段直接包含在使用两个gem的应用程序的rakefile中,那么事情就完美无缺。

通过访问原始文件覆盖rails帮助程序

我想使用rails熟悉的助手,但function略有改变。 我看待它的方式,我希望能够做到这样的事情: module AwesomeHelper #… create alias of stylesheet_link_tag to old_stylesheet_link_tag def stylesheet_link_tag(*args) if @be_awesome awesome_stylesheet_link_tag *args else old_stylesheet_link_tag *args end end end 我看到它的方式,我有三个选择: 猴子修补:重新打开rails helper模块。 如果rails团队改变了他们的帮助器模块的名称,我的代码就变成了脆弱的来源。 不是不可克服的,但并不理想。 使用不同的方法名称:试图坚持共轨接口可能是我的垮台。 我的更改可能会成为其他开发人员混淆的根源 分离方法(新):不确定这是否有效,或者它是否会有与1相同的缺点。研究这个,但这可能是一个很好的起点。 所以这里的问题是,我是否坚持使用其中一种次优解决方案,还是有其他方式我没有考虑过? 如果我选择选项3,有没有办法在不直接寻址rails helper模块的情况下执行此操作? (注意:我删除了上下文,因为它没有添加任何问题。)