使用find_by_sql查询设计模型时,列用户名不存在错误

shlomo_maghen

我正在尝试使用find_by_sql查询我的Devise创建的表,并且遇到了一个奇怪的错误。

User.find_by_sql("select username from user")

结果是:

PG::UndefinedColumn: ERROR:  column "username" does not exist
LINE 1: select username from user
: select username from user

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  
column "username" does not exist

LINE 1: select username from user
           ^
: select username from user

这是我的设计迁移(我添加了用户名字段):

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      ## Database authenticatable
      t.string :username,           null: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip


      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
  end
end

如您所见,我已经声明了字段用户名。以这种方式查询其他表可以完美地工作。我也试过了User.find_by_sql("select 'username' from user"),那才回来[#<User id: nil>]

谢谢!

编辑:要添加该User.last返回

#<User id: 1, username: "xxxxxx", email: "xxxxxxxx", 
encrypted_password: "xxxxxx", reset_password_token: nil, 
reset_password_sent_at: nil, remember_created_at: nil, 
sign_in_count: 2, current_sign_in_at: "2016-06-26 20:16:59", 
last_sign_in_at: "2016-06-25 22:00:31", current_sign_in_ip: "xxxxx", 
last_sign_in_ip: "xxxx", created_at: "2016-06-25 22:00:31", 
updated_at: "2016-06-26 20:16:59"> 

用正确的值代替“ xxxxx”

严厉的特里维迪

应该是因为表的名称是users而不是user您可以检查schema.rb表的名称是否为usersuser但是,根据迁移,它必须为users

这应该工作:User.find_by_sql("select username from users")User.find_by_sql("select id, username from users")如果需要记录的user_id和用户名,则可以使用

或者更确切地说,我建议您以红宝石的方式来做: User.select(:username)

希望能帮助到你 : )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PostgreSQL错误致命:角色“用户名”不存在

PostgreSQL错误:致命:角色“用户名”不存在

如果用户名尚不存在,如何通过 postgresql POOL 查询插入用户名

通过数据库查询用户名以确保当用户想要更改其现有用户名时不存在相同的用户名

Postgres 和 Docker:数据库错误 - 角色“用户名”不存在

当用户名不存在时,登录功能会创建 KeyError - Python

BadMethodCallException 方法用户名不存在

在多个文件中搜索用户名,如果不存在则使用 bash 脚本进行打印

仅使用用户名更改记录来了解多个用户名更改中的单个用户(不存在唯一ID)

CodeIgniter如果存在用户名,则通过用户名获取userinfo,如果不存在,则通过userID获取

检查列表中是否存在用户名,如果不存在则仅创建用户

Postgres 错误:使用 json 字段时列不存在

sshd:不允许用户<用户名>,因为shell zsh不存在

在 Django 中查询数据库或模型中不存在的字段时捕获错误

如果 MongoDB 中不存在用户名或电子邮件,则创建新文档

Angular 5属性“用户名”在类型“ string []”上不存在

当前上下文中不存在“用户名”

Android sqlite查询在确定确实存在列时不存在错误

[Java] [SQL]查询时使用硬编码的用户名和密码

在Django项目中使用Facebook登录时不存在用户匹配查询

SQL不存在查询

不存在SQL查询

Perforce:从控制台运行“ p4 sync”命令后,获取用户<用户名>不存在

无法添加具有数字用户名的用户帐户-useradd:组“ 11”不存在

使用Spring Data本机查询时,具有该位置[1]的参数不存在错误

Firestore检查用户名是否存在,最好的模型以不查询整个数据库?

错误:SQL插入命令中不存在“存在”列

大查询-仅在列值不存在时插入

实体框架使用数据库或代码优先模型中不存在的列生成sql