2010-08-14 14 views

Odpowiedz

90

Jeśli wcześniej określony limit w migracji i chcą po prostu usunąć limit, można po prostu to zrobić:

change_column :users, :column, :string, :limit => 255 

255 jest standardową długością kolumny z ciągami, a szyny po prostu zmywają określony wcześniej limit.

Aktualizacja:

Chociaż to działa w wielu wersjach Rails, prawdopodobnie być lepiej przystosowane do wykorzystania w odpowiedzi nil jak Giuseppe.

change_column :users, :column, :string, :limit => nil 

Oznacza to, że jedyną rzeczą, którą robią źle używał null zamiast nil.

0

Struny bez limitu nie jest czymś wsparcie Większość baz danych: trzeba podać rozmiar w varchar(SIZE) definicji.
Chociaż możesz spróbować, osobiście wybrałbym numer :limit => BIG_ENOUGH_NUMBER. Możesz także rozważyć użycie typu CLOB dla bardzo dużych tekstów.

0

Aby to DB-kierowca niezależny jeden powinien napisać smth takiego:

add_column :tablename, :fieldname_tmp, :text 
Tablename.reset_column_information 
Tablename.update_all("fieldname_tmp = fieldname") 
remove_column :tablename, :fieldname 
rename_column :tablename, :fieldname_tmp, :fieldname 
3

Zmień typ kolumny na :text. Nie ma limitu.

change_column :tablename, :fieldname, :text, :limit => nil 
+1

To jest nieprawidłowe ...jeśli po prostu zmienisz z: string na: text, rake db: migrate pozostawi limit w miejscu, co zepsuje sytuację, gdy spróbujesz zrobić rake w prowizji heroku: schemat: load – jpwynn

34

Oto co mi się przydarzyło.

zdałem sobie sprawę, że pole ciąg miałem na stole nie było wystarczające, aby utrzymać jego zawartość, więc generowane migrację który zawierał:

def self.up 
    change_column :articles, :author_list, :text 
end 

Po przeprowadzeniu migracji, jednak schemat miał:

create_table "articles", :force => true do |t| 
    t.string "title" 
    t.text  "author_list", :limit => 255 
end 

Co nie było w porządku. Więc ja "redid" migrację następująco:

def self.up 
    # careful, it's "nil", not "null" 
    change_column :articles, :author_list, :text, :limit => nil 
end 

Tym razem granica zniknęła w schema.rb:

create_table "articles", :force => true do |t| 
    t.string "title" 
    t.text  "author_list" 
end 
+0

Dla mnie potrzebowałem prowizji db: migrate: reset aby naprawdę zmienić limit i należy uważać na to polecenie, ponieważ powoduje to upuszczenie bazy danych. – p1100i

0

I była taka sama łódź dziś, starając się usunąć limit I 'd został dodany do pola tekstowego i nie zająłby. Próbowałem kilku migracji.

Szyny 4.2.7.1 Ruby 2.3.1p112

W końcu jedyną rzeczą, która pracowała była określając limit 255. Próbując dopasować do niczego innego nie będzie działać dla mnie.

Powiązane problemy