gpt4 book ai didi

ruby-on-rails - 如何在 Rails 3.2 中隐藏模型中的列?

转载 作者:行者123 更新时间:2023-12-02 05:26:23 24 4
gpt4 key购买 nike

在 Rails 3.1 之前,我们可以更新 ActiveRecord::Base 的 self.columns 方法。但这现在似乎行不通了。

现在看来,如果我从表中删除一列,我将被迫重新启动 Rails 服务器。如果我不这样做,当插入到表中时,我会不断收到错误消息。 Rails 仍然认为旧列存在,即使它不再存在于数据库中。

最佳答案

Active Record 不支持开箱即用,因为它查询数据库以获取模型的列(不同于 Merb 的 ORM 工具,Datamapper)。

尽管如此,您可以通过以下方式在 Rails 上修补此功能(假设,例如,您想要忽略以“deprecated”字符串开头的列):

module ActiveRecord
module ConnectionAdapters
class SchemaCache

def initialize(conn)
@connection = conn
@tables = {}

@columns = Hash.new do |h, table_name|
columns = conn.columns(table_name, "#{table_name} Columns").reject { |c| c.name.start_with? "deprecated"}
h[table_name] = columns
end

@columns_hash = Hash.new do |h, table_name|
h[table_name] = Hash[columns[table_name].map { |col|
[col.name, col]
}]
end

@primary_keys = Hash.new do |h, table_name|
h[table_name] = table_exists?(table_name) ? conn.primary_key(table_name) : nil
end
end
end
end
end

关于ruby-on-rails - 如何在 Rails 3.2 中隐藏模型中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021019/

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