Как организовать модели в Синатре? - PullRequest
3 голосов
/ 20 июля 2011

У меня есть интересная организация моих моделей в проекте Синатры.

Допустим, у меня есть 2 модели: Post и Comment, nn Post модель, я должен назвать Comment модель. И теперь у меня есть <class:Post>': uninitialized constant Comment (NameError).

Я знаю, что проблема заключается в заказе требуемых моделей, но что если у меня много моделей? Каким образом в Rails требуются модели и т. Д .?

UPDATE

Я использую этот код для auto_load моих моделей в приложениях Sinatra / Rack / Grape. Этот код должен находиться вверху вашего кода, т.е. в загрузочном файле.

models = File.join(File.dirname(__FILE__), 'app', 'models') # path to your models
$LOAD_PATH << File.expand_path(models)

# Constent Missing for requiring models files
def Object.const_missing(const)
    require const.to_s.underscore
    klass = const_get(const)
    return klass if klass
end

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Вы должны поместить все свои модели в папку, такую ​​как lib, в свое приложение, затем вы можете добавить это в начало вашего файла приложения Sinatra:

$: << File.dirname(__FILE__) + "/lib" # Assuming app.rb is at the same level as lib

require 'post'
require 'comment'

Вы должны организовать своюкод, чтобы не вызывать другие модели, пока не будут загружены все объявления моделей.

3 голосов
/ 20 июля 2011

Способ Rails основан на очень приятной возможности Ruby: const_missing.Вы можете написать свой метод const_missing или поискать в Интернете решение с помощью const_missing и sinatra.

0 голосов
/ 22 июля 2011

нет проблем, когда я попробовал это

Комментарий, если он находится в методе Post, на самом деле не должен оцениваться должно быть какое-то обстоятельство, вызывающее ошибку NameError

не вызывайте Post в теле объявления класса загрузить все файлы модели в соответствии с предложением первого комментатора

не должно иметь таких же проблем со ссылками, как Java как таковая в динамическом языке как Ruby

...