gpt4 book ai didi

ruby-on-rails - 无方法错误 : undefined method `value_for_database' for # (Rails 5)

转载 作者:行者123 更新时间:2023-11-29 14:03:25 24 4
gpt4 key购买 nike

我有一个(全新的)Rails 5 项目,当我尝试运行迁移时它抛出错误。

(我在使用 PostgreSQL 9.4 的 Raspberry Pi 上运行 Ruby 2.2.4,但是当我第一次尝试使用 SQLite 运行迁移时弹出相同的错误消息。)

到目前为止,我唯一的迁移是非常基础的:

class CreateAuthors < ActiveRecord::Migration[5.0]
def change
create_table :authors do |t|
t.string :username
t.timestamps
end
end
end

当我运行 rake db:migrate 时,这会产生以下输出。

pi@raspberrypi:~/projects/gnn $ rake db:migrate
== 20160915091621 CreateAuthors: migrating ====================================
-- create_table(:authors, {})
-> 0.0283s
== 20160915091621 CreateAuthors: migrated (0.0287s) ===========================

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `value_for_database' for #<Array:0x2a10470>
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `block in exec_no_cache'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `each'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `map'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `exec_no_cache'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:587:in `execute_and_clear'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:135:in `exec_insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:124:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/relation.rb:65:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:554:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/counter_cache.rb:128:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/locking/optimistic.rb:75:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/attribute_methods/dirty.rb:123:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:302:in `block in _create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_create_callbacks'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:302:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/timestamp.rb:68:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:534:in `create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:298:in `block in create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_save_callbacks'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:298:in `create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:152:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/validations.rb:50:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/attribute_methods/dirty.rb:30:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:324:in `block in save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:230:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:211:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:392:in `with_transaction_returning_status'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:324:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/suppressor.rb:45:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:51:in `create!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1247:in `record_version_state_after_migrating'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1212:in `block in execute_migration_in_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1279:in `block in ddl_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `block in transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:189:in `within_new_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:211:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1279:in `ddl_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1210:in `execute_migration_in_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1183:in `block in migrate_without_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1182:in `each'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1182:in `migrate_without_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1131:in `block in migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1298:in `with_advisory_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1131:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1005:in `up'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:983:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:161:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:58:in `block (2 levels) in <top (required)>'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
NoMethodError: undefined method `value_for_database' for #<Array:0x2a10470>
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `block in exec_no_cache'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `each'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `map'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:597:in `exec_no_cache'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:587:in `execute_and_clear'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:135:in `exec_insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:124:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/relation.rb:65:in `insert'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:554:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/counter_cache.rb:128:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/locking/optimistic.rb:75:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/attribute_methods/dirty.rb:123:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:302:in `block in _create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_create_callbacks'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:302:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/timestamp.rb:68:in `_create_record'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:534:in `create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:298:in `block in create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_save_callbacks'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/callbacks.rb:298:in `create_or_update'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:152:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/validations.rb:50:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/attribute_methods/dirty.rb:30:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:324:in `block in save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:230:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:211:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:392:in `with_transaction_returning_status'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:324:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/suppressor.rb:45:in `save!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/persistence.rb:51:in `create!'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1247:in `record_version_state_after_migrating'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1212:in `block in execute_migration_in_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1279:in `block in ddl_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `block in transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:189:in `within_new_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/transactions.rb:211:in `transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1279:in `ddl_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1210:in `execute_migration_in_transaction'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1183:in `block in migrate_without_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1182:in `each'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1182:in `migrate_without_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1131:in `block in migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1298:in `with_advisory_lock'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1131:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1005:in `up'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:983:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:161:in `migrate'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:58:in `block (2 levels) in <top (required)>'
/home/pi/.rvm/gems/ruby-2.2.4@gnn/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

编辑也许值得一提的是 rake db:create 运行良好。

这也是我的 database.yml 文件,以防我在那里遗漏了一些东西(我对 PostgreSQL 很陌生)

default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
<<: *default
database: gnn_dev
username: gnn
password: Lorem123
host: localhost
port: 5432

最佳答案

我在开发过程中遇到了同样的问题。找到原因了。

在我的例子中,我添加了一个新的 gem“imgurapi”,它将“to_hash”添加到 Array 对象

class Array # :nodoc:
# Skipped code

def to_hash # :nodoc:
inject({}) { |hsh, (k,v)| hsh[k] = v ; hsh }
end unless method_defined?(:to_hash)
end

结果是在 gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:135 中调用代码 exec_query(sql, name, binds): in 'exec_insert'binds 变量从 Array 转换为 Hash 类型的原因,这里描述得很好 https://makandracards.com/makandra/36013-heads-up-ruby-implicitly-converts-a-hash-to-keyword-arguments .结果我们遇到了错误,因为这种转换是意外的。

解决方案

找到为 Array 定义“to_hash”方法的 gem 并删除该定义。祝你好运!

关于ruby-on-rails - 无方法错误 : undefined method `value_for_database' for #<Array> (Rails 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com