表和视图之间列名的不同行为

时间:2014-01-25 21:54:25

标签: ruby view sequel

我有一张桌子和一张基于桌子的视图:

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`"]

我该如何避免这种行为?

我的环境:

  • 赢7
  • Ruby 1.9.3
  • 续集宝石版“4.6.0”。
  • sqlite3-1.3.7 86的mingw32

1 个答案:

答案 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]