向Rails 4 MVC添加自定义方法

时间:2013-12-11 08:34:53

标签: ruby rubygems gem ruby-on-rails-4

我正在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的最佳方法是什么?

1 个答案:

答案 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谈到了周围的环境。这对你来说也许是一本有趣的读物!