我想向name现有表 psql 中的列添加唯一约束
创建表(PostgreSQL):
class CreateRequests < ActiveRecord::Migration
def change
create_table :requests do |t|
t.integer :user_id
t.string :name
t.string :address
t.timestamps null: true
end
add_index :requests, :user_id
end
end
Run Code Online (Sandbox Code Playgroud)
所以我在模型中添加了验证唯一性
class Request < ModelBase
belongs_to :user
validates :user, presence: true
validates :name, uniqueness: true, allow_blank: true
...
Run Code Online (Sandbox Code Playgroud)
和这样的迁移:
def change
add_index :user_requests, :name, unique: true
end
Run Code Online (Sandbox Code Playgroud)
但我注意到在某些情况下,名称可以为空,我可以在条件:name为空/不为空的情况下添加索引吗?
编辑:是的,我希望那些空值保留在数据库中(我不需要修改过去的请求)。我认为我需要编辑迁移以更准确地了解数据库的实际状态。
我正在将过滤器(user.type)添加到我的查询/关系中的方法内。
有时,如果在过滤之前选择按用户分组(需要users table在另一个模块中进行内部联接),我会收到错误:
PostgreSQL: PG::DuplicateAlias: ERROR: table name "users" specified more than once
在错误发生之前 JOIN 已在查询中 -
$ pry> relation.to_sql
SELECT \"posts\".* FROM \"posts\"
INNER JOIN users ON users.id = posts.user_id
WHERE \"posts\".\"created_at\" BETWEEN '2019-05-01 00:00:00'
AND '2020-05-01 23:59:59' AND \"users\".\"type\" = 'Guest'"
Run Code Online (Sandbox Code Playgroud)
我想通过检查表是否已连接到我的 ActiveRecord::Relation 对象中来修复它。我补充道:
def join_users
return relation if /JOIN users/.match? relation.to_sql
relation.joins('LEFT JOIN users ON users.id = posts.user_id')
end
Run Code Online (Sandbox Code Playgroud)
这个解决方案有效,但我想知道 - 有没有更好的方法来检查 JOIN 是否是内部关系?
我想转换元组之类的
t = [(4,10),(9,7),(11,2),(2,2)]
Run Code Online (Sandbox Code Playgroud)
到二维数组像:
a = [[4,10],[9,7],[11,2],[2,2]]
Run Code Online (Sandbox Code Playgroud)
我试过了
a = []
for i in t:
a.append(np.asarray(i))
print a
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法?
我正在尝试编写单元测试,其中我需要模拟来自 Cognito 服务的方法的响应 - CognitoIdentityServiceProvider
我有以下工作代码调用该adminInitiateAuth操作
import * from AWS from 'aws-sdk'
const cognito = new AWS.CognitoIdentityServiceProvider();
const response = await cognito.adminInitiateAuth(expectedParams).promise();
// main functionality I want to test
Run Code Online (Sandbox Code Playgroud)
我想要一个规范,我尝试模拟此服务作为先决条件
const mockResponse = {
AuthenticationResult: {
AccessToken: 'expected-token'
}
}
jest.mock('aws-sdk', () => {
return {
CognitoIdentityServiceProvider: {
adminInitiateAuth: () => {
return mockResponse;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这给我返回一个错误
AWS.CognitoIdentityServiceProvider is not a constructor
这怎么不能是一个构造函数呢?你有什么想法如何嘲笑它吗?
这可能是初学者的事情,但我不知道如何处理它。我想向username现有表 psql 中的列添加唯一约束
迁移创建表:
class CreateRequests < ActiveRecord::Migration
def change
create_table :requests do |t|
t.integer :user_id
t.string :username
t.string :address
t.timestamps null: true
end
add_index :requests, :user_id
end
end
Run Code Online (Sandbox Code Playgroud)
所以我在模型中添加了验证唯一性
class Request < ModelBase
belongs_to :user
validates :user, presence: true
validates :username, uniqueness: true
...
Run Code Online (Sandbox Code Playgroud)
如何通过 rails 迁移为数据库中的一列添加唯一性?
在以下行中:(bla - 表示不重要)
> blabla|blabla|bla|blabla| blabla [Geobacter sp. M21]
> blabla|blabla|bla|blabla| blabla [Acetobacter pasteurianus IFO 3283-07]
> blabla|blabla|bla|blabla| blabla [Gardnerella vaginalis ATCC 14019]
> blabla|blabla|bla|blabla| blabla [Granulibacter bethesdensis CGDNIH1]
Run Code Online (Sandbox Code Playgroud)
我试图将括号[]中的所有信息作为:
Geobacter sp. M21
Acetobacter pasteurianus IFO 3283-07
Gardnerella vaginalis ATCC 14019
Granulibacter bethesdensis CGDNIH1
Run Code Online (Sandbox Code Playgroud)
我的代码在这里当然不起作用 - 在[]中有时候是3,有时是4个"alfanumeric words",还有像"."或" - "这样的字符:
import re
#code...
pattern = r'[ \w+ \w+ \w+ ]'
for i in lines_:
m = re.search ( pattern, str(i) )
print m.group()
Run Code Online (Sandbox Code Playgroud)
这样可以使用正则表达式获取这些信息吗?
python ×2
arrays ×1
express ×1
jestjs ×1
model ×1
node.js ×1
postgresql ×1
psql ×1
python-2.7 ×1
regex ×1
string ×1
validation ×1