سؤال

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

undefined method 'link_to'

يتم ترتيب المساعد على النحو التالي:

module MyHelper

  class Facet

    def render_for_search
      link_to("Value", params)
    end
  end

  class FacetList
    attr_accessor :facets

    def initialize
      #Create facets
    end

    def render_for_search
      result = ""
      facets.each do |facet|
        result << facet.render_for_search
      end
      result
    end
  end
end
هل كانت مفيدة؟

المحلول

هذا لأنه في غضون الفئة، لا تملك الوصول إلى ملزمة القالب. من أجل الاتصال render_for_search طريقة ربما تفعل شيئا مثل

<%= Facet.new.render_for_search %>

فقط تجاوز الخاص بك initialize طريقة لاتخاذ السياق الحالي كوسيطة. الأمر نفسه ينطبق على معايير التجزئة.

class Facet
  def initialize(context)
    @context = context
  end
  def render_for_search
    @context.link_to("Value", @context.params)
  end
end

ثم اتصل

<%= Facet.new(self).render_for_search %>

خلاف ذلك، حدد render_for_search طريقة مباشرة داخل MyHelper الوحدة ولا تلتفها في فصل.

نصائح أخرى

حاول استخدام هذا:

self.class.helpers.link_to

لأن Link_to غير محدد في نطاقك الحالي.

ما سبق سيعمل على وحدة تحكم، لكنني أظن أنه سيعمل داخل مساعد آخر أيضا. إن لم يكن ثم حاول:

include ActionView::Helpers::UrlHelper

في الجزء العلوي من المساعد الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top