Rails中控制器中的任何内容都可以访问的变量

时间:2009-10-22 19:58:58

标签: ruby-on-rails ruby controller

我不知道这是不是坏形式,但是我需要设置一个文件路径,该控制器中的动作中的所有对象都可以访问它。控制器中的一个操作会创建一个文件并将其存储在路径中。另一个操作使用send_file为文件服务。我存储变量的唯一地方是模型中的对象。然而,将URL存储在任意第一个对象中,或者将URL复制到所有对象上似乎真的很愚蠢。最好的方法是什么?

我希望这很清楚。

3 个答案:

答案 0 :(得分:6)

如果这是特定于网站用户的文件路径,那么每个用户都有不同的路径,您可以将其存储在会话中。

session[:file_path] = generate_file!

...用户转到下一页......

send_file session[:file_path]

答案 1 :(得分:1)

您可以在应用程序控制器中创建一个返回路径的方法。然后,此方法将在整个控制器中可用。不知道这是否必然是“最佳实践”,但它对我有用。

答案 2 :(得分:0)

答案取决于您的背景。以下是一些通用建议:

如果每个模型有一个文件,那么您需要在每个模型上存储一个路径。

如果有多个模型共享一个文件,但您的对象在层次结构上是相关的,则需要将其存储在“父对象” - 具有其他人的对象上。其他对象必须执行self.parent.file_path。

最后,如果有几个非相关模型使用了一个文件,那么我不知道该建议什么,除了可能有更好的方法来组织你的模型。

您想要存储哪些对象,以及它们之间的关系?