Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4:从数据库初始化哈希表的正确方法?_Ruby On Rails 4_View Helpers - Fatal编程技术网

Ruby on rails 4 Rails 4:从数据库初始化哈希表的正确方法?

Ruby on rails 4 Rails 4:从数据库初始化哈希表的正确方法?,ruby-on-rails-4,view-helpers,Ruby On Rails 4,View Helpers,我的第一个问题,温柔一点:-) 我有一个rails应用程序,它使用数据库中的文本片段(表基本上包含一个短键k和相应的文本;有点像i18n,但由于超出范围的原因,我现在不想使用它)。为视图创建了一个小的辅助函数,以通过键获取匹配的文本,沿着“text.find_by k:x”的行。地狱般的数据库负载,但允许文本由CMS动态更改 但是由于事实证明文本很少改变,我想将整个表预加载到一个散列中。因为我不确定把这些初始化的东西放在哪里,也因为我认为延迟加载可能很酷,下面是我所做的(简化): 这似乎很有效。

我的第一个问题,温柔一点:-)

我有一个rails应用程序,它使用数据库中的文本片段(表基本上包含一个短键k和相应的文本;有点像i18n,但由于超出范围的原因,我现在不想使用它)。为视图创建了一个小的辅助函数,以通过键获取匹配的文本,沿着“text.find_by k:x”的行。地狱般的数据库负载,但允许文本由CMS动态更改

但是由于事实证明文本很少改变,我想将整个表预加载到一个散列中。因为我不确定把这些初始化的东西放在哪里,也因为我认为延迟加载可能很酷,下面是我所做的(简化):


这似乎很有效。但由于我在这里是一个新手,我想知道是否有人认为有更好的解决方案,或者更“正轨”的解决方案?任何意见高度赞赏

你所做的很酷。与显式的
initItems
方法相反,我更可能创建一个方法
items
来记忆这些项。这将是更为传统的解决方案

使用
pull
仅获取表中需要的字段。。。这将使SQL调用更加高效

由于本例中的
pulk
返回一个由两个元素数组组成的数组,因此可以很容易地使用
to_h
方法将其转换为哈希

(另外,惯例是对方法名称使用snake_大小写)


你所做的很酷。与显式的
initItems
方法相反,我更可能创建一个方法
items
来记忆这些项。这将是更为传统的解决方案

使用
pull
仅获取表中需要的字段。。。这将使SQL调用更加高效

由于本例中的
pulk
返回一个由两个元素数组组成的数组,因此可以很容易地使用
to_h
方法将其转换为哈希

(另外,惯例是对方法名称使用snake_大小写)

module MainHelper
...
@@items = nil

def getText(x)
  initItems if !@@items
  @@items[x]
end

private

def initItems
  @@items = {}
  Text.all.each {|t| @@items[t.k] = t.text}  #load from model
end
module MainHelper
  ...
  @@items = nil

  def get_text(x)
    items[x]
  end

  private

  def items
    @@items ||= Text.pluck(:k,:text).to_h  #load from model
  end

end