سؤال

يتم كسر جوهرة Will_paginate على إصدار Oracle. الافتراضي paginate_by_sql تتم إدراج الطريقة في الوحدة النمطية الوصلية "كما" في استعلام وتسبب في فشلها.

يتم تثبيت الكود نفسه بسهولة، لكنني لست متأكدا من أفضل طريقة للحصول على القضبان لالتقاط التغيير الخاص بي.

لا أريد تغيير التعليمات البرمجية في GEM نفسها، حيث سيترك التعليمات البرمجية المكسورة في الأجهزة الأخرى.

حاولت إنشاء ملف Lib / Test.rb الذي يحتوي على:

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

وتتطلب ذلك من البيئة .rb، لكنها لا تختار تغييراتي. لقد جربت أيضا مطالبا به من وحدات التحكم / 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. Voila، قرد فوري التصحيح!

نصائح أخرى

حل أكثر إيجازا:

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

ضع التعليمات البرمجية في ملف تهيئة في التكوين / المهيئين. هذا هو المكان الصحيح لوضع التعليمات البرمجية التي يجب تشغيلها عند تحميل البيئة. كما أنه ينظم الكود الخاص بك بشكل أفضل، مما يجعل كل ملء نية أكثر وضوحا، وبالتالي ستكون البق أسهل في التعقب. لا تشوش البيئة.

حسنا، سأجعل هذا أسهل بالنسبة لأشخاص يحبون نفسي الذين يأتون إلى جانبهم وما زالوا يكافحون قليلا بعد قراءة الإجابات الأخرى.

أولا ابحث عن الرمز الذي تريد تغييره في Repo GitHub من خلال البحث عن سطر التعليمات البرمجية (يمكنك بسهولة العثور على هذا باستخدام نقب) تريد تغيير في GEM، ثم تحديد Code على اليسار بدلا من Issues

enter image description here

enter image description here

التالي انسخ محتوى الوحدة النمطية التي تريد تغييرها وتضعها في اسمه .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