Has_many Beziehungen abbilden

Hallo Liste!

Als PHP Umsteiger habe ich ab und an noch ein paar Probleme mit Rails.

Im Moment komme ich bei folgendem nicht weiter:

Ich habe eine kleine Anwendung auf die Beine gestellt. Es ist eine
Bestandsliste. Hierbei ist es schon möglich alle Einzelheiten zu den
Einträgen zu löschen und zu ändern. Natürlich ist auch das Neuanlegen
möglich.

Jetzt sollen jedem Eintrag eine Kategorie zugeordnet werden. Dazu habe
ich schon eine entsprechende Tabelle Category angelegt und in der
vorhandenen Tabelle Pages den Fremdschlüssel category_id plaziert.

Nun möchte ich auf der Indexseite die Auflistung der Einträge, durch
die Auflistung der Kategorien ersätzen. Dabei soll bei Klick auf eine
Kategorie deren zugehörigen Einträge angezeigt werden.

Außerdem soll beim Neuanlegen und ändern eine select Liste mit allen
Kategorien vorgegeben werden.

Leider bin ich an diesem Punkt nicht weitergekommen und hoffe Ihr
könnt mir helfen.

Danke

Gruß
Frank

Am 16.09.2008 um 10:28 schrieb Frank Mahlstedt:

Hallo Liste!

Als PHP Umsteiger habe ich ab und an noch ein paar Probleme mit Rails.

Hallo Frank…
das glaube ich gerne…

Im Moment komme ich bei folgendem nicht weiter:

Ich habe eine kleine Anwendung auf die Beine gestellt. Es ist eine
Bestandsliste. Hierbei ist es schon möglich alle Einzelheiten zu den
Einträgen zu löschen und zu ändern. Natürlich ist auch das Neuanlegen
möglich.

Ich habe gerade kein Zeit für ausführlich…

googlen:

rails one to many relationships

gibt es reichlich Tuts

sehr gut…
Gruß

Werner L.
Lindenburger Allee 22 - 50931
Köln
0221.8805 635


http://www.webagentur-laude.de

Hallo Frank,

auf den ersten Blick würde ich Dir den Rat geben Dir eines der
zahlreichen Rails-Bücher zu holen und das mal durchzuarbeiten (bspw:
Agile Webdevelopment with Rails). Dort bekommst du die Grundlagen sehr
gut vermittelt. Ansonsten wird es nur unnötig schwer, sich in Rails
einzuarbeiten.

Dennoch ein paar Tips zu Deiner Frage:

Generell müssen die Relationen auf Datenbankebene (die Du schon
richtigerweise gesetzt hast) als Assoziationen in Rails abgebildet
werden. In deinem Fall wäre das:

class Page < ActiveRecord::Base
belongs_to :category
end

class Category < ActiveRecord::Base
has_many :pages
end

Für die Kategorien würde ich einen extra Controller erstellen, etwa
einen CategoryController, der in etwa so aussehen würde:

class CategoryController < ApplicationController

def index
@categories = Category.find(:all)
end

def show
@category = Category.find(params[:id])
@pages = @category.pages
end

end

In der View der index-Action dann sowas in der Art (URL ist Restfull):

<% for category in @categories %>
<%= link_to category.name, category_path(category) %>
<% end %>

Der Pfad “category_path(category)” sieht dann im Browser so aus:
“category/id” und verweist in einem Restfull Design auf die show-Methode
im CategoryController. Falls du nicht Restfull arbeitest, dann schreibe
da stattdessen sowas hin: “:action => “show”, :id => category.id”.

In der show-Methode suchst Du dann über den übergebenen Parameter die
entsprechende Category und kannst aufgrund der Assozationsmethoden
direkt auf die zugehörigen “Pages” zugreifen.

Das war nur mal eine grobe Zusammenfassung. Ich würde Dir aber wirklich
den Tipp geben, diese Grundlagen anhand eines Buches zu lernen.

Hier gibt’s sogar ein deutsches frei von Gallileo. Weiß allerdings
nicht, wie gut oder schlecht das ist.

http://www.galileocomputing.de/openbook/ruby_on_rails/ruby_on_rails_10_010.htm#mj8612ed43287d40386f62cc4b20c34f82

LG

Mike

Am 16.09.2008 um 12:24 schrieb Mike Z.:

Hallo Frank,

auf den ersten Blick würde ich Dir den Rat geben Dir eines der
zahlreichen Rails-Bücher zu holen und das mal durchzuarbeiten (bspw:
Agile Webdevelopment with Rails). Dort bekommst du die Grundlagen sehr
gut vermittelt. Ansonsten wird es nur unnötig schwer, sich in Rails
einzuarbeiten.

z.Zt. sehr günstig gebraucht bei bei Amazon… da Neuauflage im Oktober…

aber zum Start sollte es o.k. sein…das Buch ist wirklich Klasse.

Gruß

Werner L.
Lindenburger Allee 22 - 50931
Köln
0221.8805 635


http://www.webagentur-laude.de

Mike Z. wrote:

class CategoryController < ApplicationController

def index
@categories = Category.find(:all)
end

def show
@category = Category.find(params[:id])
@pages = @category.pages
end

end

Ich korrigiere mich kurz:

class CategoriesController < ApplicationController

end

Der Controller muss natürlich plural sein (wenn Restfull)! :slight_smile: