2013-12-11 4 views
2

레일스에서 ​​간단한 관리 인터페이스 인 gem을 만들고 있습니다. 레일 응용 프로그램을 구축 한 경험이 있지만 처음으로 보석을 개발할 때 레일 내부의 보석 부분에 메서드를 만드는 개념에 문제가 있습니다. 예를 들어레일 4에 커스텀 메소드 추가하기 MVC

내가 내 보석의 일부 내 세 가지 방법이 응용 프로그램을 레일을 통해 액세스 할 수 있도록합니다. 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

죄송합니다, 그냥 오타, 나는 그것을 고치지 않을 것입니다. –

관련 문제