Oracleのバージョンでは、will_paginate gemが壊れています。デフォルト paginate_by_sql
WillPaginateモジュールのメソッドは、追加の 'AS'をクエリに挿入して失敗させています。
コード自体は簡単に修正できますが、Railsを取得して変更を取得する最善の方法はわかりません。
Gem自体のコードを変更したくないのは、コードが他のマシンで壊れてしまうからです。
次を含むlib/test.rbファイルを作成してみました。
module WillPaginate
def paginate_by_sql
(my code goes here)
end
end
それをenvironment.rbから要求しますが、それは私の変更を反映していません。また、controllers/application.rbから要求することを試みましたが、再度、変更を反映しませんでした。
一時的に、特定のモデル自体の中でメソッドをオーバーライドすることで機能するようになりましたが、これはちょっとしたハックであり、このプロジェクトの他のモデルでは使用できません。
これを行う簡単な方法があると確信していますが、Googleを使用して追跡する運はありません。
あなたがしていることは機能しますが、コードは次のように見える必要があります:
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
コードをconfig/initializersの初期化ファイルに入れます。これは、環境のロード時に実行する必要があるコードを置く正しい場所です。また、コードをより適切に整理し、各ファイルの意図を明確にします。したがって、バグを追跡しやすくなります。 environment.rbを乱雑にしないでください!
OK、私は私のような、他の答えを読んだ後でもまだ苦労している人のためにこれを簡単にするつもりです
最初のコード行を検索することにより、githubリポジトリで変更したいコードを見つけます( pry )gemを変更し、左側のCode
の代わりにIssues
を選択します
Next変更するモジュールのコンテンツをコピーし、config/initializersフォルダー内の適切な名前の.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
次に、コードに追加の変更を加えて、サーバーを再起動します。
離れて!