2013-12-11 4 views
2

Я строю драгоценный камень в Rails, который является простым интерфейсом администратора. У меня есть опыт создания приложений с рельсами, но это первый раз, когда я разрабатываю драгоценный камень, и у меня есть проблема с концепцией создания методов в моей неотъемлемой части внутренних частей рельсов.Добавление настраиваемых методов в Rails 4 MVC

Например, я хочу, чтобы мои три метода, которые являются частью моего драгоценного камня, доступны через приложение rails. Эти методы являются: 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 

Так я хочу, чтобы эти методы доступны в моих рельсах 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) %> 

Так что же лучший способ добавить методы из моего драгоценного камня в рельсы MVC?

ответ

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, Иегуда Кац говорит немного больше о окрестности. Это может быть интересно прочитать и вам!

+0

Добавлена ​​ссылка на связанное сообщение в блоге. –

+0

Была небольшая проблема, необходимая для изменения include/extend. Модуль ViewHelper был включен, модули ActiveRecord и ControllerAdditions, где они расширены. И тогда это сработало: D –

+0

Извините, просто опечатка, я исправлю –

Смежные вопросы