我为Ruby on Rails创建了一个简单的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"
我最终设法破解了这个错误,但感觉非常糟糕,并且在某些情况下无法工作。 在gem中包含视图的正确方法是什么?
我看过创建一个引擎,但这似乎有些过分,因为我只是有一个问题和一些观点。
答案 0 :(得分:5)
自Rails 3以来,“正确”的方法是创建一个Engine
;此外还有a Rails guide,但创建基本引擎非常简单:
module MyGemName
class Engine < Rails::Engine
end
end
当Rails查找要渲染的视图时,它将首先查看应用程序的app/views
目录。如果在那里找不到视图,它将检查具有此目录的所有引擎的app/views
目录。