ruby-on-rails - 为什么 Active Record 发送的数据与 schema.rb 不同?
问题描述
我创建了一个新的迁移来添加一个名为tabletransferred
的列advance_payments
。
class AddTransferredToAdvancePayments < ActiveRecord::Migration[5.0]
def change
add_column :advance_payments, :transferred , :boolean, default: false
end
end
迁移后,该列确实存在于schema.rb中:
create_table "advance_payments", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
...
t.boolean "transferred", default: false
...
end
安慰
但是当我AdvancePayment
在控制台中检查一个对象时,没有名为transferred
AdvancePayment.last.transferred
或者AdvancePayment.last.transferred?
NoMethodError:未定义的方法“已转移”
[1] pry(main)> AdvancePayment.last
AdvancePayment Load (0.5ms) SELECT `advance_payments`.* FROM `advance_payments` ORDER BY `advance_payments`.`id` DESC LIMIT 1
=> #<AdvancePayment:0x0000000747e468
id: 107,
...
// all columns except "transferred"
[10] pry(main)> AdvancePayment.has_attribute?(:transferred)
=> false
我尝试了db:migrate
并且db:schema:load
得到了相同的结果。我还尝试drop
重新创建数据库,关闭然后重新打开服务器没什么更好的。
解决方案
无法真正解释原因,但编辑change
方法up
并down
解决了问题
def self.up
add_column :advance_payments, :transferred , :boolean, default: false
end
def self.down
remove_column :advance_payments, :transferred
end
推荐阅读
- sql - 如何在 SQL 表上创建一个附加字段,仅指示前一个最大值的增加
- mongodb - 如何在 MongoDB 集合中获取有关进程编写的信息
- wordpress - 文件夹中存在文件/媒体但抛出错误 404 - WORDPRESS
- javascript - 是否有与 php 的原生 hash() 函数对应的 javascript?
- common-lisp - 通用 lisp 中的递归“撰写”(从方案翻译)
- react-native - 如何通过 flatList 显示 Json 数据?
- azure - Get-AzSnapshot:无法将“System.Object []”转换为参数所需的类型“System.String”不支持指定的方法
- c++ - 如何修复 C++ 中结构的分段错误?
- javascript - JavaScript 比较两个具有相同 ID 的元素,如果它们的内容不同,则为它们设置样式
- sql - 如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误