2011-08-02 43 views
15

Tôi có rất nhiều người giúp đỡ trong project_name.rb Sinatra chính của tôi và tôi muốn loại bỏ chúng vào tập tin bên ngoài, thực hành tốt nhất để làm điều đó là gì?Sinatra helper trong tập tin bên ngoài

từ ./preject_name.rb

helpers do 
    ...#bunch of helpers 
    end 

để cho exapmple ./helpers/something.rb

cảm ơn bạn

Trả lời

8

Cũng như bạn nói nó tự hỏi:

Di chuyển khối helpers vào một tệp khác và require nơi bạn cần.

#helpers.rb 
helpers do 
... 
end 

#project_name.rb 
require 'path/to/helpers.rb' 
+0

lol, đơn giản :) tại sao tôi không cố gắng ở nơi đầu tiên :) cảm ơn bạn, tôi đã sử dụng giống như 'require '# {File.dirname (__ FILE __)}/helpers/helpers.rb" ' – equivalent8

+0

Khi bạn sử dụng Ruby 1.9 .2 bạn có thể sử dụng 'help_relative 'helpers/helpers'' thay vì' File'-construct – daddz

+0

lợi thế là gì? ... và tôi muốn dự án này chạy trên tất cả các máy, sẽ được trên github để chia sẻ :) – equivalent8

14

Than ôi, nếu, như tôi, bạn đang xây dựng một ứng dụng mô-đun Sinatra, nó phức tạp hơn một chút so với chỉ đơn giản là di chuyển helpers ra vào tập tin khác.

Cách duy nhất tôi làm việc này là như sau.

đầu tiên trong ứng dụng của bạn (tôi sẽ gọi đây là my_modular_app.rb)

require 'sinatra/base' 
require 'sinatra/some_helpers' 

class MyModularApp < Sinatra::Base 
    helpers Sinatra::SomeHelpers 

    ... 

end 

và sau đó tạo cấu trúc thư mục ./lib/sinatra/ và tạo some_helpers.rb như sau:

require 'sinatra/base' 

module Sinatra 
    module SomeHelpers 

    def help_me_world 
     logger.debug "hello from a helper" 
    end 

    end 

    helpers SomeHelpers 

end 

làm điều này bạn chỉ có thể chia tất cả những người trợ giúp của bạn được chia thành nhiều tệp, tạo ra sự rõ ràng hơn trong các dự án lớn hơn.

+0

Tôi nghĩ rằng nó có thể đơn giản hơn. Xem câu trả lời dưới đây. – kgpdeveloper

26

Cách đơn giản và đề nghị:

module ApplicationHelper 

# methods 

end 

class Main < Sinatra::Base 

    helpers ApplicationHelper 

end 
+0

Tôi sẽ cung cấp cho rằng một đi –

+0

@DaveSag tuyệt vời. Nếu bạn đọc cuốn sách Sinatra, nó ở đó. – kgpdeveloper

+6

Đây phải là câu trả lời được chấp nhận – Jonah

2

Dường như câu trả lời @DaveSag cung cấp bỏ lỡ một cái gì đó. Nên thêm một dòng vào đầu my_modular_app.rb:

$:.unshift File.expand_path('../lib', __FILE__) # add ./lib to $LOAD_PATH 

require 'sinatra/base' 
require 'sinatra/some_helpers' # this line breaks unless line 1 is added. 

# more code below... 

Bên cạnh đó, nếu ai đó thích một "phong cách cổ điển" như tôi, sau đây là dành cho bạn :)

Trong app.rb

$:.unshift File.expand_path('../lib', __FILE__) 

require 'sinatra' 
require 'sinatra/some_helpers' 

get '/' do 
    hello_world 
end 

Trong lib/Sinatra/some_helpers.rb

module Sinatra 
    module SomeHelper 
    def hello_world 
     "Hello World from Helper!!" 
    end 
    end 

    helpers SomeHelper 
end 
Các vấn đề liên quan