我有一张桌子和一张基于桌子的视图:
require 'sequel'
db = Sequel.sqlite
db.create_table(:t1){
String :f1
String :f2
}
db.create_view(:v1, db[:t1].select(:f1))
如果我根据表格创建数据集,则数据集中的字段名称与表格相同(:f1
):
sel = db[:t1].select(:f1)
p sel.sql #"SELECT `f1` FROM `t1`"
p sel.columns#[:f1]
但是如果我对视图执行相同的操作,则列名称会从:f1
更改为:"'f1'"
(请参阅代码示例以获取正确的值,我必须修改一下以进行降价)
sel = db[:v1].select(:f1)
p sel.sql #"SELECT `f1` FROM `v1`"
p sel.columns #[:"`f1`"]
我该如何避免这种行为?
我的环境:
答案 0 :(得分:1)
我在一个新的rails应用程序(3.2.15)中使用续集添加(4.6.0)在rails控制台中尝试了你的代码,我没有看到这种行为。不知道是什么,但你的装置上有些东西:
db = Sequel.sqlite
# => #<Sequel::SQLite::Database: {:adapter=>:sqlite}>
db.create_table(:t1){
String :f1
String :f2
}
# => nil
db.create_view(:v1, db[:t1].select(:f1))
# => nil
sel = db[:t1].select(:f1)
# => #<Sequel::SQLite::Dataset: "SELECT `f1` FROM `t1`">
p sel.sql
# "SELECT `f1` FROM `t1`"
# => "SELECT `f1` FROM `t1`"
p sel.columns#[:f1]
# [:f1]
# => [:f1]
sel = db[:v1].select(:f1)
# => #<Sequel::SQLite::Dataset: "SELECT `f1` FROM `v1`">
p sel.sql
# "SELECT `f1` FROM `v1`"
# => "SELECT `f1` FROM `v1`"
p sel.columns #[:"`f1`"]
# [:f1]
# => [:f1]