2012-04-14 5 views
3

Ich versuche, ein Modell mit einem Binary-Feld in Datamapper für Rails 3 Entfernen Grenze zu erstellen, die wie so aussieht: Ich bekommevon Binary-Spalte für PostgreSQL in DataMapper

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 

Allerdings, wenn ich versuchen zu migrieren die folgenden:

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

ich kann nicht die Grenze von 50, die DataMapper wird Platzierung auf dem Gebiet zu entfernen scheinen, einen Weg zu finden. Weiß jemand wie man das macht oder das Problem löst?

+0

Ich glaube nicht, dass dies PostgreSQL-bezogenen ... – vyegorov

+0

Nun ist es zweifellos ein Datamapper Problem, aber es ist PGSQL verwandt, wie es mit dem BYTEA-Spaltentyp zu tun. – Ger

Antwort

4

Dies ist ein Fehler in DataMapper. Schauen Sie sich this thread an. Es wurde bereits in GitHub behoben, aber es ist noch nicht zu einer Veröffentlichung gekommen. Wenn Sie damit einverstanden sind, ist es sehr einfach, dm-migrations zu patchen, um es zu beheben. In "dm-Migrationen/Adapter/dm-do-adapter.rb", finden Sie die Zeile, die

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

sagt und

&& schema_primitive != 'BYTEA' 

bis Ende anhängen.

Ich habe Ihren Code hier getestet und es funktioniert mit dem Patch angewendet.

+0

Super - vielen Dank! Ich füge nur einen Hinweis hinzu, dass ein Upgrade auf die neuesten dm-Migrationen, die auf github aufbauen, einen Abhängigkeitskonflikt mit meinen anderen dm-* Gems verursacht, so dass es einfacher ist, die Ruby-Datei selbst zu aktualisieren. Danke noch einmal. – Ger

+0

Danke dafür. Ich weiß nicht wirklich, wie man einen Edelstein verändert, so dass der Fix dort funktioniert, wenn ich ihn in Heroku aufstelle. Vielleicht müsste ich stattdessen den genauen Aufruf überschreiben - was gefährlich erscheint, wenn ich vergesse, den Override zu werfen, wenn dm 1.3 veröffentlicht wird. Also ändere ich das Feld in ein TEXT-Feld für meinen Fall. –

+0

Ich weiß nicht über Heroku, aber die sicherste Wette ist, auf 1,3 zu warten :) –