rails proyecto libro formularios español crear ruby-on-rails devise rails-engines

ruby-on-rails - proyecto - scaffold ruby on rails



Falta el diseño de ayudantes de rutas dentro de las vistas del motor de rieles (3)

Estoy construyendo un motor de Rails llamado Engrave.

Tengo el motor montado así:

# Routes.rb of the host app mount Engrave::Engine => "/engrave", :as => "engrave_engine"

Dentro de este motor tengo un controlador llamado "PostsController". Cuando navego a este controlador para ver una publicación como esta: /engrave/posts/1 obtengo este error:

undefined local variable or method `new_user_session_path''

El controlador de mensajes en el motor hereda del controlador del motor, que hereda del controlador de la aplicación, así:

module Engrave class PostsController < ApplicationController ... end class Engrave::ApplicationController < ApplicationController end

New_user_session_path está siendo definido por idee, que he configurado como:

devise_for :users

La llamada a new_user_session_path está en el archivo de plantilla layouts/application.html.erb en la aplicación de host

No puedo entender por qué este asistente de ruta no está disponible en este contexto. ¿Qué estoy haciendo mal?


Utilizar

main_app.new_user_session_path

eso debería funcionar


He tenido éxito haciendo lo siguiente en la aplicación principal help_helper.rb:

module ApplicationHelper # Can search for named routes directly in the main app, omitting # the "main_app." prefix def method_missing method, *args, &block if main_app_url_helper?(method) main_app.send(method, *args) else super end end def respond_to?(method) main_app_url_helper?(method) or super end private def main_app_url_helper?(method) (method.to_s.end_with?(''_path'') or method.to_s.end_with?(''_url'')) and main_app.respond_to?(method) end end

Lo he usado en motores montables, para que no tengas que sacrificar esas características.


Trabajando en esta respuesta , incluyo todos los ayudantes que se encuentran en application_helpers.rb indicando helper "manager/application" dentro del controlador (si ''manager'' es el espacio de nombre actual de tu motor montable. Solo usa ''application'' si llamas a esto desde una aplicación estándar).