Переменная, которая доступна для всего в контроллере в Rails - PullRequest
2 голосов
/ 22 октября 2009

Я не знаю, является ли это плохой формой или нет, но мне нужно было указать путь к файлу, который будет доступен для всех объектов в действиях моего контроллера. Одно действие в контроллере создает файл и сохраняет его в пути. Другое действие обслуживает файл с помощью send_file. Единственное место, где я хранил переменные - это вместе с объектом в модели. Однако кажется глупым хранить URL в произвольно первом объекте или копировать URL-адрес по всем объектам. Какой лучший способ сделать это?

Надеюсь, это было ясно.

Ответы [ 3 ]

6 голосов
/ 23 октября 2009

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

session[:file_path] = generate_file!

… пользователь переходит на следующую страницу…

send_file session[:file_path]
1 голос
/ 23 октября 2009

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

0 голосов
/ 23 октября 2009

Ответ зависит от вашего контекста. Вот несколько общих советов:

Если для каждой модели существует один файл, вам необходимо сохранить один путь для каждой модели, в которой он есть.

Если существует один файл, совместно используемый несколькими моделями, но ваши объекты расположены в иерархии, вам нужно сохранить его в «объекте отца» - том, который имеет_много других. Другие объекты должны будут делать self.parent.file_path.

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

Какие объекты вы пытаетесь сохранить и какие отношения между ними?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...