Ruby on rails Rails中全局共享数据结构的存储位置

Ruby on rails Rails中全局共享数据结构的存储位置,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我的一个模型中有这样的数据结构: def image_size_limits { "web" => {"maxheight" => 480, "maxwidth" => 680, "minheight" => 400, "minwidth" => 600}, "phone" => {"height" => 345, "width" => 230, "minheight" => 300, "minwid

我的一个模型中有这样的数据结构:

def image_size_limits
    {
        "web" => {"maxheight" => 480, "maxwidth" => 680, "minheight" => 400, "minwidth" => 600}, 
        "phone" => {"height" => 345, "width" => 230, "minheight" => 300, "minwidth" => 200},
        "tablet" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400},
        "other" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400}
    }
end
我在自定义验证器中使用它,我必须验证上传图像的大小。我希望能够不仅在这个模型中使用这个数据结构,而且在任何地方都可以使用。在我的所有模型、视图和控制器中


我该怎么做,把它放在哪里?

我会使用一个模块

将其粘贴到
lib
目录中。(您可能需要将Rails 3配置为从
lib
文件夹自动加载类和模块。请参阅。)

然后在模型或控制器中:

class MyModel < ActiveRecord::Base
  include ImageSizes
  # ...
end


class MyController < ApplicationController
  include ImageSizes
  # ...
end
classmymodel

现在,包括
ImageSizes
模块的每个型号或控制器都可以访问该模块的方法,即
imagesize\u limits

另一个选项是创建初始值设定项文件并在其中声明常量

# config/initializers/image_size_limits.rb

IMAGE_SIZE_LIMITS = {
  "web" => {"maxheight" => 480, "maxwidth" => 680, "minheight" => 400, "minwidth" => 600}, 
  "phone" => {"height" => 345, "width" => 230, "minheight" => 300, "minwidth" => 200},
  "tablet" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400},
  "other" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400}
}

然后,在您的模型或控制器中,只需使用
IMAGE\u SIZE\u LIMITS['web']['maxheight']
即可获得Rails 4中的
480

,这也会引起关注。看看这个:
# config/initializers/image_size_limits.rb

IMAGE_SIZE_LIMITS = {
  "web" => {"maxheight" => 480, "maxwidth" => 680, "minheight" => 400, "minwidth" => 600}, 
  "phone" => {"height" => 345, "width" => 230, "minheight" => 300, "minwidth" => 200},
  "tablet" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400},
  "other" => {"height" => 680, "width" => 480, "minheight" => 600, "minwidth" => 400}
}