[code]class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column( :title, :string )
t.column( :message, :string )
end
end
def self.down
drop_table :posts
end
end[/code]
Chciałbym, aby tabela z SQL uległa rozbudowie. To znaczy chciałbym poza kolumną title i message mieć jeszcze kolumnę date. Co powinienem tu robić? Tworzyć nowa migracja, modyfikować istniejąca? Zaznaczam, że tabela z tymi dwoma kolumnami została już wcześniej utworzona.
Zdecydowanie stworzyć nową migrację. Wydaj polecenie:
rails g migration add_[tu podaj nazwę kolumny]_to_posts [nazwa kolumny]:[typ]
np.
rails g migration add_category_id_to_posts category_id:integer
To powinno “odgadnąć” jakie pole chcesz utworzyć i wygenerować odpowiednią migrację. Możesz też wygenerować pustą migrację:
rails g migration add_fields_to_posts
i
class AddFieldsToPosts < ActiveRecord::Migration
def change
add_column :posts, :category_id, :integer
add_column :posts, :tags, :string
end
end
Przykład będzie działał w Rails 3.1, które nie potrzebują metody down. Jeżeli używasz Rails < 3.1 wszystko z metody change przenieś do self.up a w self.down dodaj usunięcie pól, indexów itp (w zależności od tego co dałeś w up)
Nie używam bezpośrednio komendy rails. Wszystko wykonuje za pośrednictwem RubyMine. Mam tam generator do tworzenia migracji, ale wszystkie 3 podane przez Ciebie przykłady nie działają. Utworzyłem migrację na zwór tej ostatniej klasy. Uruchomiłem jednak tabela z baza nic a nic się nie zmieniała. W podpowiedzi RubyMine pisze, że uruchamiając migrację realizuję się komenda db:migrate. Możesz mi podpowiedzieć jak powinienem zrealizować to wywołanie metody change?
Już sobie poradziłem, utworzyłem kolejna migracja, a kod przeniosłem do self.up. Jeśli chodzi o rails to chyba z najnowszej wersji korzystam, bo wczoraj pobrałem. Dzięki za pomoc.
Niekoniecznie z najnowszej Pewnie pobrało Ci się 3.0.9. Mówiąc najnowsza miałem na myśli 3.1rc4 czy 3.1rc5. Dopiero tam są te odwracalne migracje.
Radziłbym na początek nie używać generatorów z RubyMine. Sam z niego korzystam, ale i tak generatorów używam poprzez konsolę. Pojawi się nowa wersja Railsów, goście z Jetbrains czegoś nie poprawią i cały projekt będzie Ci się wykrzaczał. Poza tym mało kto pisze tutoriale pod konkretny edytor/IDE, raczej podaje komendy do wpisania w terminalu.
W ogóle nie wiem po co od początku używasz takiej kobyły. Na początek wystarczy Ci jakiś lekki edytor tekstu. Im więcej będziesz musiał doczytać, poszukać w dokumentacji a nie polegać na ctrl+space & ctrl+q, tym więcej się nauczysz
Migracje w konsoli wywołuje się poprzez rake db:migrate
[quote=programuje_na_sedesie][code]class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column( :title, :string )
t.column( :message, :string )
end
end
def self.down
drop_table :posts
end
end[/code]
Chciałbym, aby tabela z SQL uległa rozbudowie. To znaczy chciałbym poza kolumną title i message mieć jeszcze kolumnę date. Co powinienem tu robić? Tworzyć nowa migracja, modyfikować istniejąca? Zaznaczam, że tabela z tymi dwoma kolumnami została już wcześniej utworzona.[/quote]
A moze jednak wezmiesz sobie moja rade do serca i zaczniesz czytac jakakolwiek ksiazke do ruby + rails ?
Edytor tekstu (nie mówię, że od razu vim czy emacs) + konsola to porywanie się z motyką na słońce? Skoro wolisz na samym początku nauki iść z armatą na muchę
Spoko. Na książki przyjdzie czas, na razie z ruby jestem 5 dni wolałem się pierw przekonać czy podchodzi mi ten język i rails, bo nie chciałbym kasy rzucić w błoto.
Cofanie migracji to nie za dobry pomysł, stworzenie nowej jest zdecydowanie lepszym pomysłem. Jak na razie cofałem tylko wtedy, gdy z jakiś powodów nie mogłem nadpisać nową.
Kupić książkę i się przekonać? Poza tym, again, nie musisz wydawać żadnej kasy żeby o czymkolwiek się przekonać. Podałem Ci kilka linków - wszystko za free.