在will_paginate gem是是在我的版本的Oracle的断裂。所述WillPaginate模块中的默认paginate_by_sql方法插入一个额外的“AS”到一个查询并使其失效。

在代码本身是很容易固定,但我不知道的让Rails的拿起我的变化的最佳方式。

我不希望改变宝石本身的代码,因为这将打破留在其它机器上我的代码。

我试图创建含有LIB / test.rb文件:

module WillPaginate
  def paginate_by_sql
    (my code goes here)
  end
end

和从environment.rb中需要它,但它不是拿起我的变化。 我也尝试从控制器/ application.rb中需要它,但同样,没有拿起我的变化。

暂时,我把它通过覆盖特定模型本身内的方法来工作,但是这是一个黑客位,并意味着我不能在这个项目中使用它在任何其他车型。

我敢肯定有一个简单的方法来做到这一点,但我没有任何运气跟踪下来使用谷歌。

有帮助吗?

解决方案

你在做的工作,但你的代码需要看起来像这样:

module WillPaginate
  module Finder
    module ClassMethods
      def paginate_by_sql(sql, options)
        # your code here
      end
    end
  end
end

在换句话说,进入finder.rb,删除除模块头和要覆盖的方法的一切,然后保存在LIB文件,包括在environment.rb中。瞧,即时猴子补丁!

其他提示

一个更简洁的解决方案:

WillPaginate::Finder::ClassMethods.module_eval do
 def paginate_by_sql sql, options
   # Your code here
 end
end

把代码到配置/初始化的初始化文件。这是把需要加载环境时运行的代码的正确位置。这也更好地组织你的代码,使每一个文件的意图更加清晰,因此,虫子会更容易追查。不要弄乱的environment.rb!

确定,我只是要简化这一过程的人喜欢我谁一起去,并还在读其他的答案后,挣扎了一下。

第一发现,你想搜索的代码行改变对GitHub库的代码(你可以很容易地找到这个使用的 <强>撬 ),然后选择Code左代替Issues

“在这里输入的图像描述”

“在这里输入的图像描述”

下一步复制你想改变,并将其放置到你的config /初始化文件夹内的恰当地命名.rb文件模块的内容。下面是一个例子:

module Forem
  module TopicsHelper
    def link_to_latest_post(post)
      text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
      link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
    end
  end
end

现在,它更改为:

Forem::TopicsHelper.module_eval do
  def link_to_latest_post(post)
    text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
    link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
  end
end

现在,对代码做任何额外的更改并重新启动服务器。

远离你去!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top