Zmodyfikowanie reprezentacji modelu

[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 :wink: 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 :slight_smile:

Migracje w konsoli wywołuje się poprzez rake db:migrate

Bo nie lubię porywać się z motyką na słońce.

[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 ?

http://guides.rubyonrails.org/

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ę :confused:

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.

No tak, RailsGuides są strasznie drogie… to samo Railscasts (http://railscasts.com/) czy Ruby on Rails Tutorial (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book)

Czy dobrze Cię zrozumiałem?

Wydać kasę na naukę - dobrze.

Wydać kasę na decyzję czy warto się uczyć - źle?

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ą.

Później tym bardziej ; ]

A możesz mi powiedzieć jak wydaje się kasę na decyzję, czy warto się uczyć?

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.