2010-03-13 2 views
2

Я создаю модель без таблиц Rails и немного зацикливаюсь на том, как я должен ее использовать.Rails Tableless Model

В основном я пытаюсь создать небольшое приложение, используя Feedzirra, который сканирует RSS-канал каждые X секунд, а затем отправляет мне электронное письмо только с обновлениями.

Я на самом деле пытаюсь использовать его в качестве модели activerecord, и хотя я могу заставить его работать, он, похоже, не «удерживает» данные, как ожидалось.

В качестве примера у меня есть метод инициализации, который анализирует канал в первый раз. В следующих запросах я хотел бы просто вызвать метод get_updates, который, согласно feedzirra, является существующим объектом (созданным во время инициализации), который обновляется только с различиями.

Мне очень трудно понять, как все это работает, поскольку объект, созданный по методу initialize, по-видимому, не сохраняется во всех методах модели.

Мой код выглядит примерно так:

def initialize 
    feed parse here 
end 

def get_updates 
    feedzirra update passing the feed object here 
end 

Не уверен, если это правильный способ сделать это, но все это кажется немного запутанным и не очень понятно. Я мог бы быть здесь слишком сильным, но мне хотелось бы узнать ваше мнение об этом подходе.

Заранее спасибо

+0

Как вы храните объект, созданный при инициализации? –

+0

Как вы реализуете свою без таблицы модель? Используете ли вы подход, предложенный в этом рельсе? (http://railscasts.com/episodes/193-tableless-model) –

+0

@Beerlington как переменная экземпляра, и это частично то, что я считаю неправильным. –

ответ

0

переменная экземпляра не будет сохраняться между запросами, так как они совершенно разные случаи. Вероятно, вам захочется сохранить данные фида в базе данных, чтобы он мог быть сохранен между запросами и обновлен после следующего запроса.

+0

Но это именно то, чего я не хотел делать. Нет ли способа сохранить его в «области сервера», например? Итак, до тех пор, пока сервер будет включен, фид будет доступен? –

+0

Я не уверен, почему я не думал об этом раньше, но memcached - это еще один вариант. Это в основном хранилище памяти ключей/значений, которое не требует базы данных. Rails имеет встроенную поддержку, но вам нужно больше контролировать вашу среду хостинга. Я лично не использовал его в рельсах, но только в некоторых сценариях Ruby, и он работает очень хорошо. http://www.ridingtheclutch.com/2009/01/08/cache-anything-easily-with-rails-and-memcached.html –

1

Использование шаблона проектирования singleton позволяет сохранять значения в памяти между запросами в рубине на рельсах. Rails не перезагружает все объекты в каждом запросе, поэтому можно хранить в памяти.

следующее в Config/инициализаторах/XXX

require 'singleton' 
class PersistanceVariableStore 
    include Singleton 
    def set(val) 
    @myvar = val 
    end 
    def get 
    @myvar 
    end 
end 

В контроллере, например:

@r = PersistanceVariableStore.instance 
@r.set(params[:set]) if params[:set] 

Затем в целях:

<%= @r.get %> 

Значение в @r будет сохраняться между запросами (если не выполняется в режиме cgi).

Не то, чтобы я думаю, что это хорошая идея ...

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

  • Нет связанных вопросов^_^