Ruby on rails 4 Rails 4:从数据库初始化哈希表的正确方法?
我的第一个问题,温柔一点:-) 我有一个rails应用程序,它使用数据库中的文本片段(表基本上包含一个短键k和相应的文本;有点像i18n,但由于超出范围的原因,我现在不想使用它)。为视图创建了一个小的辅助函数,以通过键获取匹配的文本,沿着“text.find_by k:x”的行。地狱般的数据库负载,但允许文本由CMS动态更改 但是由于事实证明文本很少改变,我想将整个表预加载到一个散列中。因为我不确定把这些初始化的东西放在哪里,也因为我认为延迟加载可能很酷,下面是我所做的(简化):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动态更改 但是由于事实证明文本很少改变,我想将整个表预加载到一个散列中。因为我不确定把这些初始化的东西放在哪里,也因为我认为延迟加载可能很酷,下面是我所做的(简化): 这似乎很有效。
这似乎很有效。但由于我在这里是一个新手,我想知道是否有人认为有更好的解决方案,或者更“正轨”的解决方案?任何意见高度赞赏 你所做的很酷。与显式的
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