这样做只是一个查询搜索,将其保存到一个数组,然后只搜索阵列,而不是做多的SQL查询
问题描述:
我有这个这样做只是一个查询搜索,将其保存到一个数组,然后只搜索阵列,而不是做多的SQL查询
class PagesController < ApplicationController
def index
@textos = Texto.all
@texto_historia = Texto.where(:title => "História").first.contents
@texto_capas_para_sofa = Texto.where(:title => "Capas para Sofá").first.contents
@texto_cortinas = Texto.where(:title => "Cortinas").first.contents
@texto_almofadas = Texto.where(:title => "Almofadas").first.contents
end
的SQL输出为:
←[1m←[36mTexto Load (2.0ms)←[0m ←[1mSELECT "textos".* FROM "textos"←[0m ←[1m←[35mTexto Load (1.0ms)←[0m SELECT "textos".* FROM "textos" WHERE ("textos"."title" = 'Hist├│ria') LIMIT 1 ←[1m←[36mTexto Load (0.0ms)←[0m ←[1mSELECT "textos".* FROM "textos" WHERE ("textos"."title" = 'Capas para Sof├í') LIMIT 1←[0m ←[1m←[35mTexto Load (1.0ms)←[0m SELECT "textos".* FROM "textos" WHERE ("textos"."title" = 'Cortinas') LIMIT 1 ←[1m←[36mTexto Load (1.0ms)←[0m ←[1mSELECT "textos".* FROM "textos" WHERE ("textos"."title" = 'Almofadas') LIMIT 1←[0m ←[1m←[35mTexto Load (0.0ms)←[0m SELECT "textos".* FROM "textos" WHERE ("textos"."title" = 'Informa├º├╡es de Contato') LIMIT 1
我希望仅对所有“textos”模型执行一个查询,然后在数组内或类似的东西中搜索以获取特定变量。
答
您将需要获得所有ActiveRecord对象的数组并将其转换成一个散列存储你所需要的数据。
@textos = Texto.all.inject({}) {|h, obj| h[obj.title] = obj.contents; h }
然后,你将能够与@textos["title"]
访问您的内容。
答
我想你想的find
or find_all
选项:
@texto_historia = @texto.find { |a| a.title = "História"}
+0
谢谢。这正是我所期待的。下面的答案更加减少了所需的代码行。所以这就是为什么我选择它作为正确的答案。但你的回答也非常有用。非常感谢! – pedrozath 2012-03-18 20:15:32
+0
@pedrozath根本不...很高兴你找到答案 – ScottJShea 2012-03-19 00:31:36
非常感谢。这个答案告诉我一个非常酷的方法,并提高了我的代码的优雅。 :) – pedrozath 2012-03-18 20:16:29