小编eud*_*nia的帖子

Rails 迁移 - 添加允许跳过空值的唯一索引

我想向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为空/不为空的情况下添加索引吗?

编辑:是的,我希望那些空值保留在数据库中(我不需要修改过去的请求)。我认为我需要编辑迁移以更准确地了解数据库的实际状态。

ruby-on-rails psql

12
推荐指数
2
解决办法
4853
查看次数

检查 ActiveRecord::Relation 是否已包含 JOIN

我正在将过滤器(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 是否是内部关系?

postgresql ruby-on-rails

10
推荐指数
1
解决办法
2112
查看次数

Python:将元组转换为2D数组

我想转换元组之类的

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)

有没有更简单的方法?

python arrays python-2.7

5
推荐指数
1
解决办法
5824
查看次数

如何使用 Jest 模拟 AWS Cognito CognitoIdentityServiceProvider?

我正在尝试编写单元测试,其中我需要模拟来自 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

这怎么不能是一个构造函数呢?你有什么想法如何嘲笑它吗?

amazon-web-services node.js express jestjs amazon-cognito

4
推荐指数
1
解决办法
7459
查看次数

Rails 添加独特的

这可能是初学者的事情,但我不知道如何处理它。我想向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 迁移为数据库中的一列添加唯一性?

validation model ruby-on-rails

2
推荐指数
1
解决办法
5874
查看次数

Python,正则表达式,括号内的字符串[]

在以下行中:(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 regex string bioinformatics

-2
推荐指数
1
解决办法
123
查看次数