2014-06-16 10 views
5

Stworzyłem prosty klejnot dla Ruby on Rails; chodzi o to, że zapewnia on pewien kod/widoki dla wspólnych działań (index/show/etc.), których używam w kilku moich aplikacjach. Chciałbym "wyschnąć" w klejnocie.Rendering widok z mojej Ruby on Rails Gem

Tworzenie Koncertu przebiegło bezproblemowo, jednak nie wydaje mi się, aby udało mi się wyrenderować widok w mojej aplikacji.

Na przykład w moim lib/rails_default_actions/rails_default_actions.rb zrobić:

module RailsDefaultActions 
    module DefaultActions 
    extend ActiveSupport::Concern 
     respond_to do |format| 
     format.html { render 'default/index' } 
     end 
    end 
    end 
end 

Ale powstaje błąd:

Missing template default/index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :haml]}. Searched in: 
    * "/home/martin/myapp/app/views" 
    * "/home/martin/myapp/vendor/bundle/ruby/2.1.0/gems/devise-3.2.4/app/views" 
    * "/home/martin/myapp" 

I w końcu jakby udało się włamać drogi wokół tego błędu, ale czuje się bardzo kludgey i nie działa w niektórych scenariuszach. Jaki jest poprawny sposób dołączania widoków w klejnocie?

Spojrzałem na tworzenie silnika, ale to wydaje się przesadą, ponieważ mam tylko obawy i kilka widoków.

+0

Czy widok, który chcesz renderować w aplikacji lub w klejnocie? – eduardo

+0

@eduardo To naprawdę nie ma znaczenia, ale to jest w Klejnocie. – Carpetsmoker

+0

Gdy Railsy zgłaszają błąd, pokazuje ścieżki, w których szuka się widoku. Wydaje mi się, że twój widok nie znajduje się na ścieżce ładowania. Czy to możliwe? – eduardo

Odpowiedz

4

"Prawidłowy" sposób, aby to zrobić, ponieważ Rails 3 jest utworzenie Engine; istnieje również a Rails guide do tego, ale tworząc podstawowy silnik jest tak proste, jak:

module MyGemName 
    class Engine < Rails::Engine 
    end 
end 

Kiedy Szyny szuka rzutem uczynić, będzie najpierw szukać w katalogu aplikacji app/views. Jeśli nie może znaleźć tam widoku, sprawdzi w katalogach wszystkich silników, które mają ten katalog.