2010-05-01 69 views
4

我試圖給我的web應用程序的管理員添加一些新的字段到模型的能力。該模型被稱爲Artwork,我想爲instante在運行時添加一個test_column列。我只是嘮叨,所以我添加了一個簡單的鏈接來做到這一點,它當然是參數化的。在rails中運行時向列表添加列(不包括附加表格)

我設法通過遷移來做到這一點:

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 

它的工作原理,列被添加/從DATABSE沒有問題,除去/。我現在正在使用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和mongrel與sqlite3數據庫。

感謝

+0

關閉時,我將該列視爲字符串而不是整數。 Artwork.add_column:test_column,:string 訣竅。 留下留言,以備將來參考。 – 2010-05-01 12:27:46

回答

1

在開發環境中,ActiveRecord的模型後,每一個請求重新加載它們的元數據。但是,在生產環境中,元數據在啓動時被緩存,因此,在刷新元數據之前,您添加的所有列都不易訪問。

此外,更改表通常需要獨佔表鎖,而數據被重寫,這可能會嚴重影響您網站的性能。

+1

我以爲是這樣的。表演不應該是一個真正的問題。我的想法是讓這個功能只提供給管理員,並且操作只需幾次就可以設置數據。 無論如何,你有更好的方法來設計類似的行爲有什麼建議嗎?也許我應該使用一個單獨的表來獲得更多的屬性。任何鏈接到它的良好實施? 或者,我可以強制更新生產模式中的元數據嗎? 謝謝 – 2010-05-02 20:11:32