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| %>
<tr>
<td><%=h utenti.id %></td>
<td><%=h utenti.cognome_note %></td>
<td><%=h utenti.idtipo %></td>
<td><%=h utenti.tipoutentis.descrizione %></td>
</tr>
<% end %>
</table>
<br />
provato va in errore ma dov'e l'errore ???
mi potete aiutare ?? grazie mille
on 2010-08-12 19:56
on 2010-08-13 09:29
Sarebbe meglio leggersi almeno le API... 1) 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. 2) 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
on 2010-08-13 12:31
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 Scolavino wrote: > Sarebbe meglio leggersi almeno le API... > > 1) 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. > > 2) 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
on 2010-08-13 13:57
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: http://guides.rubyonrails.org/index.html 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:
on 2010-08-13 15:24
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 Pavoni 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:
>
> http://guides.rubyonrails.org/index.html
>
> 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:
on 2010-08-13 15:49
Risolto il problema i questo modo
class Tipoutenti < ActiveRecord::Base
has_many :utentis
end
class Tipoutenti < ActiveRecord::Base
has_many :utentis
end
class UtentisController < ApplicationController
# GET /utentis
# GET /utentis.xml
def index
@utentis = Utenti.find(:all ,:include => :tipoutenti)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @utentis }
end
end
....
<% @utentis.each do |utenti| %>
<tr>
<td><%=h utenti.id %></td>
<td><%=h utenti.cognome_note %></td>
<td><%=h utenti.tipoutenti_id %></td>
<td><%=h utenti.tipoutenti.descrizione %></td>
......
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 Pavoni 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:
>>
>> http://guides.rubyonrails.org/index.html
>>
>> 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:
on 2010-08-13 15:51
ciao di nuovo Fabio,
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 :P
ciao,
A.
Il 13/08/2010 15:24, Fabio Di benedetto ha scritto:
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.