Domanda

Ho un aiutante rotaie utilizzando la structore sotto, ma quando lo uso ricevo il messaggio

undefined method 'link_to'

L'helper è organizzato come:

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
È stato utile?

Soluzione

Questo perché all'interno della classe Facet non si ha accesso al legame modello. Al fine di chiamare il metodo render_for_search probabilmente fare qualcosa di simile

<%= Facet.new.render_for_search %>

Basta sovrascrivere il metodo initialize di prendere il contesto attuale come argomento. Lo stesso vale per l'hash params.

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

Quindi chiamare

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

In caso contrario, definire il metodo render_for_search direttamente all'interno del modulo MyHelper e non avvolgerlo in una classe.

Altri suggerimenti

Prova ad usare questo:

self.class.helpers.link_to

A causa link_to non è definito nel dell'ambito corrente.

È possibile che questo funzionerà per un controller, ma credo che funzionerà all'interno di un altro aiutante pure. Se poi non provare:

include ActionView::Helpers::UrlHelper

Nella parte superiore del vostro aiutante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top