В Ruby on Rails, когда используется before_filter, тогда локальные переменные должны стать переменными экземпляра? - PullRequest
0 голосов
/ 25 сентября 2010

Если у нас есть фильтр before, который называется initialize для инициализации общих переменных, то эти переменные должны быть преобразованы в переменные экземпляра? Есть ли альтернативные способы сделать это?

Обновление: Ситуация заключается в проверке некоторых параметров URL и их установке. Раньше это было одним действием, поэтому все можно сделать с помощью локальных переменных. Но теперь 3 действия по сути принимают одни и те же параметры, поэтому код перемещается в закрытый метод validate_params и вызывается с использованием before_filter, но эти локальные переменные, похоже, должны быть превращены в переменные экземпляра.

Можно ли сделать их переменными экземпляра? Существуют ли фреймворки / гемы для проверки параметров URL, поскольку встроенные валидации предназначены для моделей.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

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

class Special < ActiveRecord::Base
  attr_accessor :sauce

  def initialize(*args)
    @sauce ||= 'tomato'
    super(*args)
  end
end

Просто не забудьтедля вызова super, так как ActiveRecords делает кучу других вещей при инициализации.

0 голосов
/ 25 сентября 2010

Существуют ли альтернативные способы сделать это?

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

...