Ruby on rails 在rails中,在运行时向模型添加列(无附加表)

Ruby on rails 在rails中,在运行时向模型添加列(无附加表),ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我试图让我的web应用程序的管理员能够向模型中添加一些新字段。这个模型叫做Artwork,我想在运行时添加一个test_列,比如instant。我只是teting,所以我添加了一个简单的链接,当然是参数化的 我通过迁移做到了这一点: def test_migration_create Artwork.add_column :test_column, :integer flash[:notice] = "Added Column test_column to artworks

我试图让我的web应用程序的管理员能够向模型中添加一些新字段。这个模型叫做Artwork,我想在运行时添加一个test_列,比如instant。我只是teting,所以我添加了一个简单的链接,当然是参数化的

我通过迁移做到了这一点:

  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_列字段,而不添加任何内容。但是,当我提交一个create或update时,test_列不会得到更新并保持为空。检查参数,我可以看到:

Parameters: {"commit"=>"Update", "authenticity_token"=>"37Bo5pT2jeoXtyY1HgkEdIhglhz8iQL0i3XAx7vu9H4=", "id"=>"62", "record"=>{"number"=>"test_artwork", "author"=>"", "title"=>"Opera di Test", "test_column"=>"TEEST", "year"=>"", "description"=>""}}
test_列参数已正确通过。那么为什么活动记录总是忽略它呢?我也尝试重新启动服务器,但没有成功

我正在使用ruby 1.8.7、rails 2.3.5和mongrel以及sqlite3数据库


感谢

在开发环境中,ActiveRecord模型会在每次请求时重新加载元数据。但是,在生产环境中,元数据是在启动时缓存的,因此在刷新元数据之前,您添加的任何列都不容易访问


此外,在重写数据时,更改表通常需要独占表锁,这可能会严重影响站点的性能

结束时,我将列视为字符串,而不是整数。Artwork.add_column:test_column,:string成功了。把这条信息留在这里供将来参考。我是这么想的。表演不应该是一个真正的问题。我的想法是让这个功能只对管理员可用,并且只对设置数据进行几次操作。不管怎样,你有什么建议可以更好地设计类似的行为吗?也许我应该为附加属性使用一个单独的表。有什么链接可以很好的实现吗?或者,我可以在生产模式下强制刷新元数据吗?谢谢