2015-07-30 9 views
8

Mam Rails Engine, który chciałbym udostępnić układ z aplikacji kontenera. Chciałbym wesprzeć wszystkich pomocników adresów URL z układu głównego aplikacji, aby uczynić integrację banalną. Że jest wspieranie układów z pomocników z aplikacji kontenera:Silnik szyn z izolowanym obszarem nazw Udostępnianie układu

= link_to "Signup", new_user_path 
= link_to "Login", new_user_path 
... 

Powoduje:

niezdefiniowana zmienna lokalna lub metoda `new_user_path” dla # < #: 0x007f9bf9a4a168>

I można to naprawić, zmieniając plik application.html (w aplikacji kontenera) na:

= link_to "Signup", main_app.new_user_path 
= link_to "Login", main_app.new_user_path 

Ale celem jest sprawienie, aby integracja silnika nie wymagała od użytkowników wprowadzania zmian w istniejącym funkcjonowaniu application.html.

Wierzę, że mogę również naprawić błędy usuwając isolate_namespace Example z lib/example/engine.rb, ale to zepsuje prawie wszystko w silniku.

W jaki sposób umożliwić pomocnikom aplikacji do kontenerów i jawnie przestrzeni nazw moich pomocników do silników, aby uniknąć konfliktów? (tj. za pomocą example.root_path zamiast root_path)?

Odpowiedz

0

Wystarczy popatrzeć na to: https://github.com/rails/rails/blob/a690207700d92a1e24712c95114a2931d6197985/actionpack/lib/abstract_controller/helpers.rb#L108

można dołączyć swoje pomocników z silnikiem w swojej aplikacji hosta.

module Blargh 
    class Engine < ::Rails::Engine 
    isolate_namespace Blargh 

    config.to_prepare do 


     # application helper 
     ApplicationController.helper(Blargh::ApplicationHelper) 
     # any other helper 
    end 
    end 
end 

W ten sposób możesz bez problemu korzystać ze swojego pomocnika w hoście. Oczywiście nie ma prawdziwych nazw w ten sposób, więc jeśli użytkownik twojego silnika wymieni nową metodę pomocnika tak samo, jak twoja metoda pomocnika, to się koliduje.

Czy to odpowiada na twoje pytanie?

Powiązane problemy