2012-04-14 44 views
3

我試圖創建一個二進制領域的DataMapper爲Rails 3的模型,看起來像這樣:在DataMapper的去除二進制列的限制對PostgreSQL

class Image 

    include DataMapper::Resource 

    # attributes 
    property :id, Serial 
    property :url, String 
    property :file_name, String 
    property :content_type, String 
    property :data, Binary 
    property :created_at, DateTime 
    property :updated_at, DateTime 

end 

然而,當我嘗試遷移我得到以下內容:

ERROR: type modifier is not allowed for type "bytea" 
LINE 1: ..." VARCHAR(50), "content_type" VARCHAR(50), "data" BYTEA(50),... 

我似乎無法找到一個方法來去除50 DataMapper的是在現場放置了極限。任何人都知道如何做到這一點或解決問題?

+0

我不認爲這是與PostgreSQL有關的...... – vyegorov 2012-04-14 16:02:01

+0

那麼它無疑是一個Datamapper問題,但它與PGSQL相關,因爲它與BYTEA列類型有關。 – Ger 2012-04-14 16:07:32

回答

4

這是DataMapper中的一個錯誤。退房this thread。它已經在GitHub中修復,但尚未發佈。如果你確定,修補dm-migrations來修復它是很容易的。在 「DM-遷移/適配器/ DM-DO-adapter.rb」,你會發現說

if dump_class.equal?(String) && schema_primitive != 'TEXT' && schema_primitive != 'CLOB' && schema_primitive != 'NVARCHAR' 

線和追加

&& schema_primitive != 'BYTEA' 

到它的結束。

我在這裏測試了你的代碼,它適用於應用的補丁。

+0

太棒了 - 非常感謝!我只是添加一個說明,即升級到最新的dm-migrations構建在github上會導致與其他dm- * gem的依賴衝突,因此您可以更容易地自行更新ruby文件。再次感謝。 – Ger 2012-04-16 08:03:37

+0

謝謝你。我真的不知道如何修改一個gem,這樣當我部署到heroku時,修補程序也可以在那裏工作?也許相反,我需要重寫確切的調用 - 這似乎是危險的,如果我忘記在dm 1.3發佈時拋棄覆蓋。所以我將該字段更改爲我的案例的TEXT字段。 – 2012-04-26 00:21:52

+0

我不知道Heroku,但最安全的賭注是等待1.3 :) – 2012-04-26 02:30:03