gpt4 book ai didi

ruby-on-rails - 在运行时在 Rails 中向模型添加列(没有附加表)

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:42 25 4
gpt4 key购买 nike

我正在尝试让我的 Web 应用程序的管理员能够向模型添加一些新字段。该模型称为 Artwork,我想在运行时立即添加一个 test_column 列。我只是在测试,所以我添加了一个简单的链接来完成它,它当然是参数化的。

我设法通过迁移做到了:

  def test_migration_create  
Artwork.add_column :test_column, :integer
flash[:notice] = "Added Column test_column to artworks"
redirect_to :action => 'index'
end

def test_migration_delete
Artwork.remove_column :test_column
flash[:notice] = "Removed column test_column from artworks"
redirect_to :action => 'index'
end

有效,该列可以毫无问题地添加到数据库中/从数据库中删除。我现在正在使用 active_scaffold,所以我得到了表单中的 test_column 字段而不添加任何内容。但是,当我提交创建或更新时,test_column 不会更新并保持为空。检查参数,我可以看到:

Parameters: {"commit"=>"Update", "authenticity_token"=>"37Bo5pT2jeoXtyY1HgkEdIhglhz8iQL0i3XAx7vu9H4=", "id"=>"62", "record"=>{"number"=>"test_artwork", "author"=>"", "title"=>"Opera di Test", "test_column"=>"TEEST", "year"=>"", "description"=>""}}

test_column 参数传递正确。那么为什么事件记录一直忽略它呢?我也尝试重新启动服务器,但没有成功。

我正在使用 ruby​​ 1.8.7、rails 2.3.5 和带有 sqlite3 数据库的 mongrel。

谢谢

最佳答案

在开发环境中,ActiveRecord 模型会根据每个请求重新加载它们的元数据。但是,在生产环境中,元数据会在启动时缓存,因此您添加的任何列在刷新元数据之前都无法轻松访问。

此外,更改表通常需要在重写数据时使用独占表锁,这确实会损害您网站的性能。

关于ruby-on-rails - 在运行时在 Rails 中向模型添加列(没有附加表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2749760/

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