Seite 1 von 1

Activ Record HILFE

BeitragVerfasst: 25.01.2009, 11:26
von isevs
Hallo,
habe folgendes Problem mit rake db:migration. Der u.g.
ActivRecord soll ausgeführt werden (2 Tabellen anlegen und
die Kategorie in einer Tabelle auf "Alle" setzen:

class CreateCats < ActiveRecord::Migration
def self.up
create_table :cats do |t|
t.string :cat_name
t.integer :parent_id
t.timestamps
end
create_table :cats_photos, :id => false do |c|
c.integer :cat_id
c.integer :photo_id
c.timestamps
end
Cat.new do |c|
c.cat_name = "Alle"
# Photo.find(:all).each do |p|
# p.cats << c
# p.save
# end
end
end
def self.down
drop_table :cats
drop_table :cats_photos
end
end

Wenn ich die Datei so speichere legt er mir die Tabellen
korrekt an und läuft ganz normal durch - mit den dazugehörigen
Meldungen.
Nehme ich das # weg, läuft er durch ohne Meldungen, also
auch keine Fehlermedlungen, und legt keine Tabellen in
der Datenbank an.
Das kann ich beliebig hin- und her probieren. immer das
gleiche Resultat.

Wer hat eine Idee, was ich machen kann / muss, damit
rails mir den gewünschten Erfolg bringt?
Muss ich evtl ein zusätzliche Methode einführen und diese
extra aufrufen?

Re: Activ Record HILFE

BeitragVerfasst: 27.11.2009, 13:36
von JayKay
Hallo isevs,

Code: Alles auswählen
Cat.new do |c|
   c.cat_name = "Alle"
   # Photo.find(:all).each do |p|
   # p.cats << c
   # p.save
# end
end



du versuchst hier eine Kategorie anzulegen, die Alle heißt und den vorhandenen Fotos diese Kategorie zuzuordnen, oder?

Also erstens würde ich Migrations nur zum Anlegen von Tabellen nutzen. Seit Rails 2.3.4 gibt es die tolle Möglichkeit im Verzeichnis db/ eine Datei seeds.rb anzulegen. In diese kann dann dein Ruby-Code, der die Tabellen füllt.
Mit dem Befehl rake db:seed führst du diesen Code aus.

Zweitens vergisst du bei deinem Code die neue Cat zu speichern. Ich würde es so machen

Code: Alles auswählen
# Datei db/seeds.rb

c = Cat.create(:cat_name=> 'Alle') # mit create wird die Kategorie geich gespeichert

p = Photo.all
p.each do |photo|
    photo.cats << c
    photo.save
end

# Console
rake db:seed



Das sollte funktionieren. Bitte schreib mal ob das dein Problem löst,

Gruß, Julian