问题 是否正确定义了我的erb模板+ HTML样式布局所使用的变量?


我在erb模板中有一个局部变量:

<% thumbnail_width = 50 %>

我正在使用它来调整一些缩略图。

但现在我意识到许多模板需要访问这个变量。

我应该把它移到哪里,它应该是什么类型的变量?


8339
2017-07-08 15:35


起源



答案:


有几种解决方案,具体取决于此变量与Rails环境的交互方式。

配置 

您可以使用全局配置文件(例如,请参阅 SimpleConfig插件)。当变量可能根据环境而变化时,这是首选。

常量

如果变量应该可以在许多不同的位置和上下文中访问,则可以定义常量。例如,您可能想要创建该文件

config/initializers/defaults.rb

并写下所有默认配置和常量。此处定义的常量将在您的Rails应用程序中自动可用。

助手

如果您的变量绑定到应用程序的特定部分(例如视图),您可能希望利用Rails帮助程序。 在您的特定情况下,您可以在application_helper.rb中创建图像帮助程序

module ApplicationHelper

  THUMBNAIL_WIDTH = 50  

  def thumbnail_tag(source, options = {})
    image_tag(source, options.reverse_merge(:width => THUMBNAIL_WIDTH))
  end

end

然后在需要创建缩略图时使用帮助程序,而不是在每个文件中反复复制相同的逻辑。


12
2017-07-08 15:47



我是第二个“助手”的回答。 - Barry Gallagher
是的,在这种情况下,它绝对是最好的解决方案。 - Simone Carletti


答案:


有几种解决方案,具体取决于此变量与Rails环境的交互方式。

配置 

您可以使用全局配置文件(例如,请参阅 SimpleConfig插件)。当变量可能根据环境而变化时,这是首选。

常量

如果变量应该可以在许多不同的位置和上下文中访问,则可以定义常量。例如,您可能想要创建该文件

config/initializers/defaults.rb

并写下所有默认配置和常量。此处定义的常量将在您的Rails应用程序中自动可用。

助手

如果您的变量绑定到应用程序的特定部分(例如视图),您可能希望利用Rails帮助程序。 在您的特定情况下,您可以在application_helper.rb中创建图像帮助程序

module ApplicationHelper

  THUMBNAIL_WIDTH = 50  

  def thumbnail_tag(source, options = {})
    image_tag(source, options.reverse_merge(:width => THUMBNAIL_WIDTH))
  end

end

然后在需要创建缩略图时使用帮助程序,而不是在每个文件中反复复制相同的逻辑。


12
2017-07-08 15:47



我是第二个“助手”的回答。 - Barry Gallagher
是的,在这种情况下,它绝对是最好的解决方案。 - Simone Carletti