Salve ragazzi,
Ho 2 modelli (con relativi controller e viste) chiamati EVENTS e LINKS.
Ogni events has_many :links
Ogni links belongs_to :event
Questo è lo schema di questi due modelli:
create_table "events", :force => true do |t|
t.string "title"
t.text "note"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "event_id"
end
create_table "links", :force => true do |t|
t.string "url"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "event_id"
end
Nella pagina SHOW della vista EVENTS vorrei mostrare tutti i link
relativi a ogni event.
Nel file routes ho scritto
resources :events do
resources :links
end
E nella pagina show della vista events ho scritto:
<ul>
<% @event.links.each do |link| %>
<li><%= link.url %></li>
<% end %>
</ul>
Solo che non funziona :( Cosa sto sbagliando?
on 2012-05-07 11:34
on 2012-05-07 11:45
event_id dev essere di tipo integer, non string 2012/5/7 Mauro M. <gagginaspinnata@gmail.com>
on 2012-05-07 12:21
Anzi tutto grazie per la risposta :)
Ho modificato lo schema ed ora è cosi:
create_table "events", :force => true do |t|
t.string "title"
t.text "note"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "link_id"
end
create_table "links", :force => true do |t|
t.string "url"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "event_id"
end
Ma continua a non funzionare :(
Sto avendo un sacco di problemi con le relation :(
on 2012-05-07 12:25
elimina la colonna link_id dalla tabella events. create_table "events", :force => true do |t| t.string "title" t.text "note" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end create_table "links", :force => true do |t| t.string "url" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.integer "event_id" end
on 2012-05-07 12:43
Niente non va :(
Il mio schema è esattamente questo ora:
create_table "events", :force => true do |t|
t.string "title"
t.text "note"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "links", :force => true do |t|
t.string "url"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "event_id"
end
Non è che c'è qualche errore qua:
<ul>
<% @event.links.each do |link| %>
<li><%= link.url %></li>
<% end %>
</ul>
?
E' la stessa cosa se faccio cosi:
<ul>
<% for link in @event.links %>
<li><%= link.url %></li>
<% end %>
</ul>
Oppure forse ho sbagliato qualcosa nel file routes?
Peps::Application.routes.draw do
resources :events do
resources :links
end
resources :links
resources :events
end
on 2012-05-07 12:59
Se può essere utile ho provato dalla console a fare cosi: 1.9.2p318 :014 > @event=Event.find(1) Event Load (0.2ms) SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1 [["id", 1]] => #<Event id: 1, title: "Germinazione", note: "Sono germinati i primi habanero", created_at: "2012-05-06 22:11:36", updated_at: "2012-05-06 22:11:36"> 1.9.2p318 :015 > @event.links Link Load (0.2ms) SELECT "links".* FROM "links" WHERE "links"."event_id" = 1 => []
on 2012-05-07 14:22
ma che tipo di errore hai? Perch a prima vista sembra tutto ok. Riesci a fornire qualche dettaglio in pi dal log?
on 2012-05-07 14:30
Alessandro R. wrote in post #1059828: > ma che tipo di errore hai? Perch a prima vista sembra tutto ok. Riesci a > fornire qualche dettaglio in pi dal log? Non ho nessun errore! Guarda il log: Started GET "/links/1" for 127.0.0.1 at 2012-05-07 12:50:26 +0200 Processing by LinksController#show as HTML Parameters: {"id"=>"1"} [1m[36mLink Load (0.2ms)[0m [1mSELECT "links".* FROM "links" WHERE "links"."id" = ? LIMIT 1[0m [["id", "1"]] Rendered links/show.html.erb within layouts/application (1.7ms) Completed 200 OK in 10ms (Views: 8.6ms | ActiveRecord: 0.2ms) Il problema è che non mi mostra, nella vista show degli eventi, i link relativi. Il codice <ul> <% @event.links.each do |link| %> <li><%= link.url %></li> <% end %> </ul> Stampa nella pagina html solo <ul></ul> Non vengono stampati i link..
on 2012-05-07 14:51
la query che genera errata. nei model hai definito la relazione? in Event devi definire has_many :links, :class_name => 'Link' in Link devi definire belongs_to :event, :class_name => 'Event', :foreign_key => :event_id 2012/5/7 Mauro M. <gagginaspinnata@gmail.com>
on 2012-05-07 15:00
Alessandro R. wrote in post #1059837: > la query che genera errata. nei model hai definito la relazione? > in Event devi definire > has_many :links, :class_name => 'Link' > > in Link devi definire > belongs_to :event, :class_name => 'Event', :foreign_key => :event_id > > 2012/5/7 Mauro M. <gagginaspinnata@gmail.com> Non avevo impostato la foreign_key nel modello.. Anche mettendola però non funziona, i link non vengono mostrati. La query che esegue ora è questa: Started GET "/events/1" for 127.0.0.1 at 2012-05-07 14:54:51 +0200 Processing by EventsController#show as HTML Parameters: {"id"=>"1"} Event Load (0.3ms) SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1 [["id", "1"]] Link Load (0.1ms) SELECT "links".* FROM "links" WHERE "links"."event_id" = 1 Rendered events/show.html.erb within layouts/application (54.5ms) Completed 200 OK in 132ms (Views: 80.1ms | ActiveRecord: 5.6ms) Puoi vedere il codice qua https://bitbucket.org/gagginaspinnata/problema-relazioni/src Grazie mille per la disponibilità
on 2012-05-07 15:43
Adesso la query che genera corretta. Sembra che non ci siano record nella tabella links :) Se esegui gli stessi due comandi di prima da terminale?
on 2012-05-07 17:22
Alessandro R. wrote in post #1059853: > Adesso la query che genera corretta. Sembra che non ci siano record > nella > tabella links :) > Se esegui gli stessi due comandi di prima da terminale? I links ci sono perchè se vado a vedere la pagina index della vista links (che ho creato) vengono mostrati :( Questo il risultato di quei comandi: 1.9.2p318 :001 > @event=Event.find(1) Event Load (4.2ms) SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1 [["id", 1]] => #<Event id: 1, title: "Germinazione", note: "Sono germinati i primi habanero", created_at: "2012-05-06 22:11:36", updated_at: "2012-05-06 22:11:36"> 1.9.2p318 :002 > @event.links Link Load (0.1ms) SELECT "links".* FROM "links" WHERE "links"."event_id" = 1 => [] 1.9.2p318 :003 >
on 2012-05-07 17:30
2012/5/7 Mauro M. <gagginaspinnata@gmail.com> > I links ci sono perch se vado a vedere la pagina index della vista > links (che ho creato) vengono mostrati :( > > ma i links hanno il giusto event_id ? Ho l'impressione che tu li abbia creati senza collegarli all'Event ... Luca
on 2012-05-07 18:02
Esatto! L'ultimo comando ti dice chiarimente che non hai impostato event id Il giorno 07/mag/2012 17.29, "Luca Mearelli" <l.mearelli@spazidigitali.com> ha scritto:
on 2012-05-07 22:54
Avete ragione inserendo un link tramite console e specificando l'id relativo funziona. Ma utilizzando il codice <%= form_for([@event, @event.links.build]) do |f| %> <p><%= f.text_field :url %></p> <p><%= f.submit "Aggiungi link" %></p> <% end %> Non dovrebbe passarlo automaticamente l'id dell'evento?
on 2012-05-08 10:36
dipende da cosa c' scritto nel controller 2012/5/7 Mauro M. <gagginaspinnata@gmail.com>
on 2012-05-08 11:09
Ok ho risolto cosi nel controller: @link.event_id= params[:event_id] A dir la verità pensavo che rails lo facesse in automatico :) Grazie mille e scusa per le mille domande :(
on 2012-05-08 11:15
Il 08/05/12 11:09, Mauro M. ha scritto: > Ok ho risolto cosi nel controller: > > @link.event_id= params[:event_id] > > A dir la verit pensavo che rails lo facesse in automatico :) > > Grazie mille e scusa per le mille domande :( Fossi in te non passerei direttamente l'id, altrimenti puoi metterci un numero a caso (a meno di validazioni). farei cos: event = Event.find(params[:event_id]) @link.events << event if event
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.