Salve a tutti dovrei creare nella pagina index un semplice elenco
composto da dati provenienti da due tabelle
esempio :
Tabella Utentis Tabella Tipoutentis
id,nome,cognome,idtipo id,descrizione
nel model utenti ho inserito
class Utenti < ActiveRecord::Base
has_and_belongs_to_many :tipoutentis
end
nel model Tipoutenti ho inserito
class Tipoutenti < ActiveRecord::Base
has_and_belongs_to_many :utentis
end
nel controller utentis
def index @utentis = Utenti.find(:all, :include=> :tipoutentis)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @utentis }
end
end
nela view index ho inserito il seguente codice
<% @utentis.each do |utenti| %>
<%=h utenti.id %>
<%=h utenti.cognome_note %>
<%=h utenti.idtipo %>
<%=h utenti.tipoutentis.descrizione %>
<% end %>
provato va in errore ma dov’e l’errore ???
mi potete aiutare ?? grazie mille
has_and_belongs_to_many non è il tipo adatto per questa relazione, è
una relazione di tipo n a n non 1 a n come risulta essere la tua.
gli standard di rails prevedono che la colonna di collegamento fra i
due models sia strutturata così [nome_tabella]_id la tua esce dallo
standard quindi devi specificarla a mano
Non ti scrivo come devi fare il codice, altrimenti sei punto a capo la
prossima volta (cone le due osservazioni dovresti trovare la soluzione
facilmente sulle api di active_record)
Fabio Di benedetto wrote:
provato va in errore ma dov’e l’errore ???
mi potete aiutare ?? grazie mille
Ciao Alessandro,
ho cambiato nella tabella utentis l’id di collegamento mettendo
tipoutentis_id nei model rispettivamente ho inserito
class Utenti < ActiveRecord::Base
has_many :tipoutentis
end
nel model Tipoutenti ho inserito
class Tipoutenti < ActiveRecord::Base
belongs_to :utentis
end
quindi nell index di utentis
ho inserito @utentis = Utenti.find(:all, :include=> :tipoutentis)
ma il risultato non cambia mi dice sempre ?
mi potresti postare la soluzione francamente con un esempio funzinante e
la guida ci posso capire meglio!
Saluti fdibenedetto
le due clausole belong_to
Alessandro S. wrote:
Sarebbe meglio leggersi almeno le API…
has_and_belongs_to_many non è il tipo adatto per questa relazione, è
una relazione di tipo n a n non 1 a n come risulta essere la tua.
gli standard di rails prevedono che la colonna di collegamento fra i
due models sia strutturata così [nome_tabella]_id la tua esce dallo
standard quindi devi specificarla a mano
Non ti scrivo come devi fare il codice, altrimenti sei punto a capo la
prossima volta (cone le due osservazioni dovresti trovare la soluzione
facilmente sulle api di active_record)
Fabio Di benedetto wrote:
provato va in errore ma dov’e l’errore ???
mi potete aiutare ?? grazie mille
un consiglio per evitare di incasinarti la vita, soprattutto se sei alle
prime armi, è quello di seguire le convenzioni usate da rails (come già
accennato da Alessandro). nel tuo caso, comincia ad usare nomi di
tabelle in inglese, perchè vengono gestite meglio (già con termini
plurali e singolari ad esempio).
la seconda cosa, è di leggere un po’ di documentazione. probabilmente
troverai molto utili le guide che trovi qui:
terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che
hai ricevuto
venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione
in Tipoutenti:
belongs_to :utenti
perchè è singolare, cioè un Tipoutente appartiene a un Utente. sempre a
occhio, credo che la relazione sia al contrario: un utente appartiene ad
un tipo_utente, mentre un tipoutente può avere più utenti
hai anche sbagliato la dichiarazione delle classi. il nome di un model è
al singolare, cioè Utente e Tipoutente, la tabella invece è al plurale
perchè contiene più record di un certo tipo. rails incoraggia un
approccio discorsivo, in pseudo-codice o a voce, diresti:
un Tipoutente ha_molti Utenti
un Utente appartiene_a un Tipoutente
seleziona un Utente con id 1 dalla tabella ‘utenti’
etc…
ciao,
A.
Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:
class Tipoutenti < ActiveRecord::Base
has_many :utentis
end
class Utenti < ActiveRecord::Base
belongs_to :tipoutenti
end
class UtentisController < ApplicationController
GET /utentis
GET /utentis.xml
def index @utentis = Utenti.all(:include => :tipoutenti)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @utentis }
end
end
…
l’errore che mi configura e’
undefined method `tipoutentis_id’ for #<Utenti id: 6, cognome_note:
“fabio”, tipoutenti_id: 1>
grazie sempre per la tua pazienza !!!
Andrea P. wrote:
ciao Fabio,
un consiglio per evitare di incasinarti la vita, soprattutto se sei alle
prime armi, � quello di seguire le convenzioni usate da rails (come gi�
accennato da Alessandro). nel tuo caso, comincia ad usare nomi di
tabelle in inglese, perch� vengono gestite meglio (gi� con termini
plurali e singolari ad esempio).
la seconda cosa, � di leggere un po’ di documentazione. probabilmente
troverai molto utili le guide che trovi qui:
terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che
hai ricevuto
venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione
in Tipoutenti:
belongs_to :utenti
perch� � singolare, cio� un Tipoutente appartiene a un Utente. sempre a
occhio, credo che la relazione sia al contrario: un utente appartiene ad
un tipo_utente, mentre un tipoutente pu� avere pi� utenti
hai anche sbagliato la dichiarazione delle classi. il nome di un model �
al singolare, cio� Utente e Tipoutente, la tabella invece � al plurale
perch� contiene pi� record di un certo tipo. rails incoraggia un
approccio discorsivo, in pseudo-codice o a voce, diresti:
un Tipoutente ha_molti Utenti
un Utente appartiene_a un Tipoutente
seleziona un Utente con id 1 dalla tabella ‘utenti’
etc…
ciao,
A.
Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:
Grazei ragazzi per i suggerimenti dopo 20 anni di onorato vb6 ed asp
inizio a cimentarmi in RAILS tra libri e aiuti validi spero di riuscire
a essere indipendente quanto prima e di poter poter contare sempre di
Voi.
Saluti e buon ferragosto!
fdibenedetto
Fabio Di benedetto wrote:
Ciao Andrea,
vediamo se ho capito
class Tipoutenti < ActiveRecord::Base
has_many :utentis
end
class Utenti < ActiveRecord::Base
belongs_to :tipoutenti
end
class UtentisController < ApplicationController
GET /utentis
GET /utentis.xml
def index @utentis = Utenti.all(:include => :tipoutenti)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @utentis }
end
end
…
l’errore che mi configura e’
undefined method `tipoutentis_id’ for #<Utenti id: 6, cognome_note:
“fabio”, tipoutenti_id: 1>
grazie sempre per la tua pazienza !!!
Andrea P. wrote:
ciao Fabio,
un consiglio per evitare di incasinarti la vita, soprattutto se sei alle
prime armi, � quello di seguire le convenzioni usate da rails (come gi�
accennato da Alessandro). nel tuo caso, comincia ad usare nomi di
tabelle in inglese, perch� vengono gestite meglio (gi� con termini
plurali e singolari ad esempio).
la seconda cosa, � di leggere un po’ di documentazione. probabilmente
troverai molto utili le guide che trovi qui:
terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che
hai ricevuto
venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione
in Tipoutenti:
belongs_to :utenti
perch� � singolare, cio� un Tipoutente appartiene a un Utente. sempre a
occhio, credo che la relazione sia al contrario: un utente appartiene ad
un tipo_utente, mentre un tipoutente pu� avere pi� utenti
hai anche sbagliato la dichiarazione delle classi. il nome di un model �
al singolare, cio� Utente e Tipoutente, la tabella invece � al plurale
perch� contiene pi� record di un certo tipo. rails incoraggia un
approccio discorsivo, in pseudo-codice o a voce, diresti:
un Tipoutente ha_molti Utenti
un Utente appartiene_a un Tipoutente
seleziona un Utente con id 1 dalla tabella ‘utenti’
etc…
ciao,
A.
Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:
l’errore che hai ricevuto è riferito al fatto che nel db non hai un
campo chiamato ‘tipoutentis_id’, ma ne hai uno ‘tipoutenti_id’. ti
ricordo inoltre che i nomi che stai usando potrebbero facilmente
portarti a errori tuoi (perchè ti confondi) o di rails che potrebbe
interpretare male i plurali/singolari, oltre al fatto che leggendo il
codice, a livello cognitivo stonerebbe parecchio
l’ideale, sarebbe ri-scrivere i modelli (e le migrazioni) in questo
modo:
definisco una classe che rappresenta il modello Utente
class User < ActiveRecord::Base
belongs_to :usertype
end
definisco una classe che rappresenta il modello Tipoutente
class Usertype < ActiveRecord::Base
has_many :users
end
nel controller il codice non cambierebbe di molto:
def index
# seleziono tutti gli User nel database ed assegno il risultato alla
variabile @utenti @utenti = User.all(:include => :usertypes)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @utenti }
end
end
nessuno ti vieta di usare l’italiano nel codice (anche se l’inglese
sarebbe meglio), tuttavia cerca di rispettare almeno le semplici
convenzioni/regole di rails
comunque, tieni sempre presente che sviluppare un’applicazione web con
ruby e rails, fondamentalmente non è diverso dall’usare un qualsiasi
altro linguaggio o framework: semplicemente ti agevola nello svolgere i
task (portando numerosi vantaggi pratici, ammesso che segui alcune
regole, è pur sempre un framework!), ma non significa che permette di
scrivere applicazioni web senza possedere le conoscenze necessarie a
farlo, per esempio, con PHP o ASP.NET
ciao,
A.
Il 13/08/2010 15:24, Fabio Di benedetto ha scritto:
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.