我认为这是互联网上一个经常出现的问题,但不幸的是我仍然无法找到成功的答案。
我正在使用Ruby on Rails 4,我想创建一个与SQL查询接口的模型,而不是数据库中的实际表。例如,假设我的数据库中有两个表:Questions
和Answers
。我想制作一个包含两个表统计信息的报告。为此,我有一个复杂的SQL语句,它从这些表中获取数据以构建统计信息。但是,SQL语句中使用的SELECT不会直接从Answers和Questions表中获取值,而是从嵌套的SELECT中获取值。
到目前为止,我已经能够创建StatItem
模型,没有任何迁移,但是当我尝试StatItem.find_by_sql("...nested selects...")
时,系统会抱怨数据库中未显示的表stat_items
。
如何创建一个模型,其实例的数据是从复杂查询而不是从表中检索的?如果不可能,我可以创建一个临时表来存储数据。在这种情况下,如何告诉迁移文件不创建这样的表(它将由查询创建)?
答案 0 :(得分:1)
如何从复杂查询创建实体化视图并遵循本教程:
答案 1 :(得分:0)
第1步 - 创建不迁移的模型
rails g model StatItem --migration=false
第2步 - 创建一个名为stat_items
#First, drop any existing table created by older requests (database connections are kept open by the server process(es).
ActiveRecord::Base.connection.execute('DROP TABLE IF EXISTS stat_items')
#Second, create the temporary table with the desired columns (notice: a dummy column called 'id:integer' should exist in the table)
ActiveRecord::Base.connection.execute('CREATE TEMP TABLE stat_items (id integer, ...)')
第3步 - 执行在stat_items
中插入行的SQL语句
第4步 - 像往常一样使用模型访问表格
例如:
StatItem.find_by_...
非常感谢任何评论/改进。