为啥 Active Record 发送的数据与 schema.rb 不同?
Posted
技术标签:
【中文标题】为啥 Active Record 发送的数据与 schema.rb 不同?【英文标题】:Why Active Record doesn't send same data than schema.rb?为什么 Active Record 发送的数据与 schema.rb 不同? 【发布时间】:2018-12-10 12:23:15 【问题描述】:我创建了一个新的迁移,将名为transferred
的列添加到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: 未定义的方法 `transferred'
[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
,而不是重新创建数据库,关闭然后重新打开服务器,没什么更好的。
【问题讨论】:
transferred?
和 transfrerred=
怎么样 - 这些存在吗?
退出控制台并重新进入。
@JagdeepSingh 我编辑了我的帖子。不起作用:/
@meta 也不起作用
检查您的 INNODB 数据库,如果您看到该列,请告诉我们
【参考方案1】:
无法真正解释原因,但通过 up
和 down
编辑 change
方法解决了问题
def self.up
add_column :advance_payments, :transferred , :boolean, default: false
end
def self.down
remove_column :advance_payments, :transferred
end
【讨论】:
以上是关于为啥 Active Record 发送的数据与 schema.rb 不同?的主要内容,如果未能解决你的问题,请参考以下文章
MVC vs. Active Record vs. Factory [关闭]
Codeigniter Active Record 中的 Concat
CodeIgniter Active Record 与常规查询