如何解决如何在Ruby on Rails 5.2中使用原始Postgres SQL查询结果?
我的应用程序将字段的多个翻译作为表单中的嵌套字段进行管理。 最初,我使用
f.fields_for fields,translations do |locution|
初始化嵌套字段(效果很好)。
现在,我需要执行一个更复杂的查询以获取翻译列表,并且还允许用户为每种可用语言创建新的翻译。所以我将代码修改为:
<% raw_SQL = "select #{document_id} as document_id,'#{document_type}' as document_type,'#{field_name}' as field_name,property as language,case when property = language then existing_translations.id else null end as id,case when property = language then existing_translations.translation else null end as translation
from
(select * from dqm_app.translations where document_id = #{document_id} and field_name = '#{field_name}' and document_type = '#{document_type}') as existing_translations
right outer join (select property
from dqm_app.parameters inner join dqm_app.parameters_lists on parameters.parameters_list_id = parameters_lists.id
where parameters_lists.CODE = 'LIST_OF_LANGUAGES') as langues on property = language" %>
<% f.fields_for fields,ActiveRecord::Base.connection.exec_query(raw_SQL).to_a do |locution| %>
翻译仅适用于法语,由于要创建嵌套字段,因此用户可以添加其他翻译:
查询返回预期结果,但以哈希数组的形式而不是ActiveRecord集合的形式。如何使该结果可用于fields_for方法?
非常感谢您的帮助!
解决方法
您可以使用具有这些属性的模型并自己转换结果。
records = ActiveRecord::Base.connection.exec_query(raw_sql).to_a
records.map { |attrs| YourModel.new(attrs) }
这会起作用,因为Rails允许您通过像这样的哈希来初始化模型
YourModel.new({ id: 1 })
Map将遍历数组中的每个元素并分别对其进行初始化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。