Прежде всего, вы должны поместить все методы хранения данных и сбора данных в ресурсы и модели, чтобы они были доступны из всех контроллеров. Тем не менее, вы можете сохранить внутренние операции с изменением данных в своих индивидуальных контроллерах. Как только вы его организовали так, вы можете сделать то, что делает Hobo: создайте контроллер только для первой страницы, «front_controller», если хотите. Здесь вы можете отображать данные, собранные из всех ваших моделей и ресурсов, а также ссылки на другие действия вашего контроллера.
Вот несколько interestingthoughts на лучшей организации ваших моделей и контроллеров (жир моделей, тощий контроллеров является правилом. Так как вы сказали, что вы используете другой API, (например, LastFM и щебет), вы можете взять посмотрите на this railscasts о создании моделей не ActiveRecord (модели, которые не привязаны к базе данных)
вот какой-то псевдокод, имейте в виду, что он действительно нацелен только на ваш вопрос.
# pseudo code
class TwitterController < ApplicationController
def index
@services = {
:twitter => TwitterModel.find(:all, ...),
}
end
def update_twitter
TwitterUpdaterClass.update { |twit|
_m = TwitterModel.new
_m.message = twit.msg
_m.from = twit.from
# ..
_m.save
}
end
end
class MyIndexController < ApplicationController
def index
@services = {
:twitter => TwitterModel.find(:all, ...),
:lastfm => LastFmModel.find(:all, ...)
}
end
end
это может быть гораздо лучше иметь фоновые рабочие обновить ваш отдых-услуг, а контроллер, который нужно вызвать каждый раз, когда вы хотите получать последние твиты. здесь хорошая статья, показывающая - 6 ways to run background jobs in rubyonrails
# more pseudo code
class TwitterWorker < BackgrounDRb::MetaWorker
set_worker_name :twitter_worker
def create(args = nil) # instead of TwitterController.update_twitter
TwitterUpdaterClass.update { |twit|
_m = TwitterModel.new
_m.message = twit.msg
_m.from = twit.from
# ..
_m.save
}
end
end
GJ ganking мой точный текст: P –
(Несмотря на то, что этот ответ копирует текст двух других ответов, я комментирую здесь, так как это принятый ответ.) Вместо того, чтобы создавать не-ActiveRecord модель, вы можете в настоящее время используйте [ActiveModel] (https://github.com/rails/rails/tree/master/activemodel), который «предоставляет известный набор интерфейсов для использования в классах моделей. Они позволяют помощникам Action Pack взаимодействовать с неактивными Например, модели записей. " –