Рельс Табличная Модель - PullRequest
2 голосов
/ 13 марта 2010

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

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

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

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

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

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

def initialize
     feed parse here
end

def get_updates
     feedzirra update passing the feed object here
end

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

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

Ответы [ 2 ]

1 голос
/ 15 марта 2010

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

со следующим в config / initializers / 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).

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

0 голосов
/ 14 марта 2010

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

...