我正在尝试找出一个很好的验证,以便在我的迁移中使用,这需要对用户电子邮件地址不区分大小写.简而言之,我想要的东西就像validate :email, :uniqueness => {:case_sensitive => false}无需转换所有东西来使用Rails或ActiveRecord.我可以通过正则表达式运行电子邮件,但我不喜欢这种解决方案.
我找到了一条评论[1]说你可以使用,
validates_unique(:email){ |ds| ds.opts[:where].args.map! { |x| Sequel.function(:lower, x)}; ds}
但我不明白那段代码在做什么,当我不知道那个ds对象是什么或者一切都在发生时我不想使用那些代码(为什么map!, PostgreSQL拥有Sequel.function的:lower?......也许,但我不知道.)
[1] http://comments.gmane.org/gmane.comp.lang.ruby.sequel/6447
所以我需要回答两件事之一:
1)如何在纯粹的Sequel.migration(没有ActiveRecord,没有Rails)中执行不区分大小写的唯一性验证?
- 或者 -
2)如果我在网上发现的代码片段实际上是我想要的,它做什么以及它是如何工作的?(ds对象是什么以及此验证对我的数据库有何作用?)
我正试图通过Sequel的数据库运行一些迁移Sequel::Migrator.但是,当我跑...
DB = Sequel.sqlite
Sequel::Migrator.apply DB, 'db/migrations'
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
未初始化的常量续集:: Migrator
是什么赋予了?
我在代码中创建了一个具有以下架构的表
DB.create_table :Pokemon do
primary_key :id
String :first_name
String :last_name
String :email
String :zipcode
String :company_name
String :google_profile
String :skype
String :phone
String :about
String :linkedin_profile_url
String :company_url
column :needs , 'Text[]'
column :offering , 'Text[]'
end
Run Code Online (Sandbox Code Playgroud)
为了需求和提供,我插入了一个带有以下代码的字符串数组
pokes=DB[:Pokemon];
off=['hello1' , 'hello2']
nee= ['need1' , 'need2']
pokes.insert(:first_name => 'abcd' ,:last_name => 'mehandiratta', :offering => off , :needs => nee)
Run Code Online (Sandbox Code Playgroud)
当我运行它时出现错误
PG::Error: ERROR: column "offering" is of type text[] but expression is of type record (Sequel::DatabaseError)
LINE 1: ...fering", "needs") VALUES …Run Code Online (Sandbox Code Playgroud) 我们试图找出我们的Rails 3.1.12应用程序是否打开带有gem续集的SQLite3数据库(版本3.6或更高版本).这是我们做的:
rails console在Rails控制台会话中,键入以下命令:
sequel = Sequel.connect('sqlite://development')
Run Code Online (Sandbox Code Playgroud)
它返回:
=> #<Sequel::SQLite::Database: "sqlite://development">
Run Code Online (Sandbox Code Playgroud)
sequel.class也会返回:
=> Sequel::SQLite::Database
Run Code Online (Sandbox Code Playgroud)但是,当尝试从数据库中选择sequel.execute或检查表时sequel.schema,返回的文本表明该表不存在.
我们不确定数据库(这里的开发)是否已经打开.我们如何检查?
我有一个用户表。我正在尝试将列的默认整数值从 0 更改为 1。
到目前为止,我能想到的唯一方法是在单独的迁移中删除并添加具有更新的默认值的列。但我不想这样做,因为这会丢失预先存在的表中的数据。我一直无法在网上找到答案。
有 Sequel 方法可以做到这一点吗?
现在我有:
WHERE flag_1 NOT IN ("D") AND flag_2 NOT IN ("D")
Run Code Online (Sandbox Code Playgroud)
我有两组人在处理相同的数据,一组完成后,他们将“标记”该数据D,但是报表仍然需要提取信息,直到两个都被标记为止D。
现在,如果其中任何一个被标记D,该报告将排除数据,但是我只希望在完成并标记了这两个方面之后就将其排除D。
有指导吗?
我曾经Sequel::Model.DB与数据库进行交互,但由于某种原因,数据库结构发生了更改,例如通过数据库控制台。
这个方法:
Sequel::Model.db.schema('table_name')
Run Code Online (Sandbox Code Playgroud)
仍然返回旧数据库,我猜是从第一个连接缓存的。
如何重置该缓存,或者在理想情况下确保每个请求的实际数据库连接?
我每次都尝试使用新连接:
def db
@db ||= Sequel.connect(Sequel::Model.db.opts)
end
Run Code Online (Sandbox Code Playgroud)
但是,可以预见的是,我最终得到了这个错误:
Sequel::DatabaseConnectionError - PG::ConnectionBad: FATAL: sorry, too many clients already
Run Code Online (Sandbox Code Playgroud) 我正在使用续集。
如何生成迁移文件(即使是空的),以便其名称类似于20160313142249_create_table1.rb?
即,如何让它生成“20160313142249”部分?续集能做到吗?
即,给定一个数据集对象ds = DB[:transactions].where{updated_at > 1.day.ago}- 没有有趣的连接和其他东西 - 我怎么能获取表名 ( :transactions) ?
我相当擅长 PHP (OOP & flat)。在过去一年左右的时间里,我的任务是维护 Ruby 代码库;我还在学习的一项技能。我不太清楚如何使用续集因此采用正确的过滤链AND,以及OR语句可以适当遏制。
这是我想要的 MySQL 查询结构:
SELECT * FROM `some_objects`
WHERE (
(
((`datebegin` >= 1950) AND (`datebegin` <= 1959)) OR ((`dateend` >= 1950) AND (`dateend` <= 1959))
)
OR
((`datebegin` <= 1950) AND (`dateend` >= 1959))
AND
(NOT `datebegin` = 0) AND (NOT `dateend` = 0)
)
;
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的 Sequel 代码片段:
some_objects = where{((datebegin >= start_year) & (datebegin <= end_year)) | ((dateend >= start_year) & (dateend <= end_year))}.
or{(datebegin <= start_year) …Run Code Online (Sandbox Code Playgroud)