Llama al get_locations
dentro del alcance de clase, pero el método es un método de instancia, no un método de clase. Si, por ejemplo, usaste def self.get_locations
, entonces proporcionarías un método de clase, uno de los cuales puedes usar dentro del alcance de la clase (después de haberlo definido, no antes como lo haces).
El problema aquí es la lógica, ¿para qué sirve este método? ¿Para qué quieres usar @locations
? Si va a entrar en la vista de la aplicación, debe poner este método en el módulo ApplicationHelper
y llamarlo desde dentro de la acción relevante. Si desea que en otra vista en otro controlador y desea utilizar @locations
dentro de su método locations
, tal vez su configuración podría ser algo como esto:
PagesController
class PagesController < ActionController::Base
def locations
@locations = Location.where(:active => true).order('name').all
end
end
ubicaciones .html.erb
<% @locations.each do |location| %>
<%= # do something with 'location' %>
<% end %>
Si desea utilizar este interior de su application.html.erb
puede šī lo simplifico bastante ...
ApplicationController
class ApplicationController < ActionController::Base
protect_from_forgery
def locations
Location.where(:active => true).order('name').all
end
end
application.html.erb
<% locations.each do |location| %>
<%= # do something with location %>
<% end %>
La respuesta se reduce a la lógica, y para realmente saber exactamente lo que está buscando, más detalles probablemente sería requerido.
Necesito @ ubicaciones disponibles para el diseño de mi aplicación, pero también para otro controlador. El mejor lugar para poner esto? – jmccartie
Si necesita acceder a él en el diseño de su aplicación, entonces su controlador de aplicación es probablemente el mejor lugar para colocarlo, ya que estará disponible para todos sus controladores. Haga que su controlador llame a 'before_filter' en su método' get_locations' para rellenar la variable de instancia '@ locations' –