我正在Rails中构建一个gem,这是一个简单的管理界面。我有构建rails应用程序的经验,但这是我第一次开发gem并且我在rails内部的gem部分中制作方法的概念存在问题。
例如,我想通过rails应用程序访问我的三个方法,这些方法是我的gem的一部分。方法是:my_controller_method,my_model_method,my_view_method
# lib/my_gem/view_helpers.rb
module MyGem
module ViewHelpers
def my_view_method(data)
# super mega stuff
end
end
end
# lib/my_gem/active_record.rb
module MyGem
module ActiveRecord
def my_model_method(data)
# super mega stuff
end
end
end
# lib/my_gem/controller_additions.rb
module MyGem
module ControllerAdditions
def my_controller_method(data)
# super mega stuff
end
end
end
所以我希望这些方法可以在我的rails MVC架构中使用。例如
#app/models/institution.rb
class Institution < ActiveRecord::Base
validates_presence_of :contact_person, :phone_number, :email
my_model_method :some_data
end
#app/controllers/institutions_controller.rb
class InstitutionsController < ApplicationController
my_controller_method :some_data
end
#app/views/institutions/index.html
<h1></h1>
<%= my_view_method(some_data) %>
那么将我的gem中的方法添加到rails MVC的最佳方法是什么?
答案 0 :(得分:1)
在lib/my_gem.rb
中,您可以使用记录不佳的ActiveSupport#on_load,例如
require 'my_gem/view_helpers'
require 'my_gem/active_record'
require 'my_gem/controller_additions'
ActiveSupport.on_load(:action_view) do
include MyGem::ViewHelpers
end
ActiveSupport.on_load(:active_record) do
extend MyGem::ActiveRecord
end
ActiveSupport.on_load(:action_controller) do
extend MyGem::ControllerAdditions
end
In this blog post,Yehuda Katz谈到了周围的环境。这对你来说也许是一本有趣的读物!