Ruby on rails Rails在不使用db查询的情况下查找或初始化

Ruby on rails Rails在不使用db查询的情况下查找或初始化,ruby-on-rails,ruby,dry,Ruby On Rails,Ruby,Dry,是否有任何rails方法与find\u或

是否有任何rails方法与
find\u或
相同,但不使用数据库查询

问题是:

1。)它可能导致类似“n+1”的查询。

例如,我有一个
问题
模型,
有许多:翻译
将其连接到
翻译
模型,该模型具有属性(列)
语言
。编辑问题时,我有一个嵌套的
:translations
,但首先我需要在控制器中构建缺少的语言。如果我这样做

%w(en hu fr de it).each do |lng|
  @question.translations.find_or_initialize_by(language: lng)
end
它将每五种语言运行一次查询,即使我已经加载了
:translations

2。)它找不到非持久化元素(正是因为在数据库中进行了查询)

因此,如果在上一个表单中,有人只填写
@question
的“en”翻译,提交表单,但某些验证失败,表单会重新呈现错误消息,则有两种可能:我不运行每种语言的
查找或\u initialize\u by
(在这种情况下,仅显示“en”字段),或者我运行它(并且“en”字段将被复制-第一个字段将包含已提交但未保留的
,第二个字段将为空)

我使用的是以下内容(在每个
的块中):

这很好,但我认为它不够干(因为它重复了
@question.translations
语言
lng
),我真的希望有一些“rails way”来做到这一点


任何想法都将受到欢迎。

使用类似“查找”相关的方法将进行查询,但您的最终目标是什么?在表单中预先填充这些翻译的字段?如果是这样,您可以使用
接受嵌套的属性\u:translations
并构建
@question。translations
仅在“新建”中控制器中的操作。让我知道这是否是您所要求的,我将详细说明answer@JoseCastellanos想象一下@question的
表单有一些自己的字段(标题、默认语言…),然后是翻译的
字段(满足所有需要:
接受
嵌套的
语言隐藏的字段和值文本字段。目标是用户可以看到所有可能的语言(一次)即使该语言没有翻译(如果值为空,我拒绝翻译)。这解释得好吗?
@question.translations.select{ |t| t.language == lng }.first ||
    @question.translations.build(language: lng)