从我的Ruby on Rails Gem渲染视图

我为Ruby on Rails创建了一个简单的Gem; 我的想法是它为我在几个应用程序中使用的常见操作(索引/显示/等)提供了一些代码/视图。 我想在gem中“干掉它”。

创建关注点没有问题,但是,我似乎无法在我的应用程序中呈现视图。

例如,在我的lib/rails_default_actions/rails_default_actions.rb我做:

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

但是提出了一个错误:

 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" 

我最终设法破解了这个错误,但它感觉非常kludgey并且在某些情况下不起作用。 在gem中包含视图的正确方法是什么?

我看过创建一个引擎,但这看起来有点过分,因为我只是有一个问题和一些观点。

自Rails 3以来这样做的“正确”方法是创建一个Engine ; 还有一个Rails指南 ,但创建基本引擎就像:

 module MyGemName class Engine < Rails::Engine end end 

当Rails查找要呈现的视图时,它将首先查看app/views目录。 如果在那里找不到视图,它将检查具有此目录的所有引擎的app/views目录。