rails - hämta från flera tabeller samtidigt

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Läste lite om ruby on rails och tyckte det lät intressant, så jag beslöt mig för att pröva det!
För skojs skull tänkte jag testa och göra en liten applikation för att lista och sortera mina vinylskivor.

Så... Jag vet inte riktigt hur man lämpligast bör gå till väga men jag bestämde mig för att göra tre scaffolds med artist, album och låt. Varje albumrad har en kolumn artist_id för att koppla ihop albumet med en artist och varje låtrad har en kolumn album_id för att koppla ihop låten med sitt album.

Det jag nu vill göra är att från t.ex. /artists/1 även hämta info som ligger i tabellen albums och har samma artist_id som artisten. Googlat lite och hittat info om relationer etc men jag har inte riktigt greppat hur jag ska göra. Hjälp vore väldigt tacksamt! Nu när jag ändå skriver här kan jag passa på att fråga om någon bra sida för "kodrecept" och liknande, om ni vet någon sådan?

  • Medlem
  • Göteborg
  • 2009-02-01 13:53

Hallå!

För att skapa den typ av relation som du skall använda dig av, gör du så här:
I artist.rb så skriver du

has_many :albums

I album.rb så skriver du

belongs_to :artist
has_many :tracks

I track.rb så skriver du

belongs_to :track

Nu har du skapat en relation mellan dessa tre modeller.
För att visa alla album som tillhör en artist skriver du det här:
I views/albums/show.html.erb skriver du

<% for album in @artist.albums %>
    <%= album.name %>
<% end %>

Du skrev att du hade skapat tre scaffolds som heter artists, albums och låt, jag bytte ut låt mot track, jag har aldrig testat själv men det är nog bäst att använda sig av engleska. Om jag var otydlig så får du fråga mera!
För att lära dig mera, så tycker jag att du skall ta dig en titt på http://guides.rubyonrails.org och Railscasts - Free Ruby on Rails Screencasts

Tack så mycket! Ja, jag använder mig av engelska också men jag tänkte inte på det när jag skrev här
Det var precis så där jag hade tänkt mig i alla fall, prövade liknande förut men jag fick det aldrig att funka så nu ska vi se hur det går.

  • Medlem
  • Göteborg
  • 2009-02-01 14:09

Ja jag tänkte nästan att du hade skrivit fel i inlägget bara. Du får gärna säga till hur det går för dig!

Edit: Hade bara glömt att ta bort en grej i controllern som jag testat förut så nu funkar det. Tack för hjälpen igen! Återkommer om det blir fler problem, haha.

  • Medlem
  • Göteborg
  • 2009-02-01 14:22

Där ser man, fel av mig. I track.rb skall det stå:

belongs_to :album

Sen i views/artists/show.html.erb tror jag att du har skrivit:

<% for album in @artists.album %>

men det skall stå:

<% for album in @artist.albums %>
Senast redigerat 2009-02-01 16:26

Då har jag bara en liten fråga kvar. Ska göra motsvarande sak i /albums/1 men då funkar det inte? Antog att det skulle vara

<% for track in @albums.tracks %>
    <%= track.tracktitle %>
<% end %>

men då får jag

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.tracks
  • Medlem
  • Göteborg
  • 2009-02-01 14:59

Det skall vara:

<% for track in @album.tracks %>

Ah, det borde jag nästan kunnat fatta själv. Tack igen i alla fall. Nu har jag lyckats få det som jag vill och kan börja fixa lite. Förhoppningsvis behöver jag inte komma tillbaka hit och be om hjälp på ett bra tag!

1
Bevaka tråden