Salve a tutti vorrei
il mio problema e’ questo mi occorre passare tramite un link inserito
nella view index alla visualizzazione della form gruppo_utenti
pertanto nella view index inserisco questo codice
Quel :method, potrebbe essere :action, ma dipende come hai impostato il
file routes.rb
Ciao Luigi,
allora il file di route e’ impostato
map.resources :users
map.resources :groups
map.resources :phones
map.resources :purchases
map.resources :posts
map.resources :utentis
map.connect ‘:controller/:action/:id’
map.connect ‘:controller/:action/:id.:format’
inoltre se sostituisco il :method con :action mi sposta sulla view show
dandomi giustamente l’errore
penso che l’errore sia nel file di route ma dove ???
a me sembra corretto!
Saluti
il mio problema e’ questo mi occorre passare tramite un link inserito
nella view index alla visualizzazione della form gruppo_utenti
pertanto nella view index inserisco questo codice
:metod serve solo per specificare il tipo di verbo HTTP se non si tratta
di
un semplice GET (e nel tuo caso è un GET).
Se non hai gruppo_utenti_users nell’output di rake routes, vuole dire
che
non hai definito la route in routes.rb. Puoi farlo aggiungendo l’action
alla
risorsa:
resources :users do
collection do
get :gruppo_utenti
end
end
Se non usi Rails 3, puoi sempre scriverlo nel vecchio modo:
il mio problema e’ questo mi occorre passare tramite un link inserito
nella view index alla visualizzazione della form gruppo_utenti
pertanto nella view index inserisco questo codice
:metod serve solo per specificare il tipo di verbo HTTP se non si tratta
di
un semplice GET (e nel tuo caso � un GET).
Se non hai gruppo_utenti_users nell’output di rake routes, vuole dire
che
non hai definito la route in routes.rb. Puoi farlo aggiungendo l’action
alla
risorsa:
resources :users do
collection do
get :gruppo_utenti
end
end
Se non usi Rails 3, puoi sempre scriverlo nel vecchio modo:
Antonio Scusa ancora,
ho inserito nel file di routes
map.resources :users, :collection => { :gruppo_utenti => :get }
ma mi punta sempre allo show
inoltre ho visto con il rake che la rotta esiste
gruppo_utenti_users GET /users/gruppo_utenti(.:format)
{:controller=>“use
rs”, :action=>“gruppo_utenti”}
ma mi chiedo dove sta l’errore ?
Saluti
fdibenedetto
inoltre ho visto con il rake che la rotta esiste
gruppo_utenti_users GET /users/gruppo_utenti(.:format)
{:controller=>“use
rs”, :action=>“gruppo_utenti”}
Bene.
ma mi chiedo dove sta l’errore ?
Hai già fatto il restart del server? (È necessario quando si modifica
routes.rb.)
L’action gruppo_utenti l’hai definita come collection, non come member,
per
cui non puoi passargli un parametro.
Confesso di aver letto di corsa il tuo messaggio iniziale per cui non mi
era
chiarissimo cosa intendessi fare, ma dato questo tuo tentativo qui
sopra, mi
pare chiaro che tu voglia in realtà un metodo membro della risorsa a cui
passare un parametro. Sì tratta in pratica di uno show filtrato (hai una
collection di posts, ma vuoi comunque accedere a un particolare elemento
della risorsa users). In tal caso devi usare un altro approccio.
Ok Antonio Funziona perfettamente
solo che non riesco a trovare informazioni utili sulla configurazione di
route in italiano oppure qualch’uno in grado di spiegarmelo !
Saluti
fdibenedetto
inoltre ho visto con il rake che la rotta esiste
gruppo_utenti_users GET /users/gruppo_utenti(.:format)
{:controller=>“use
rs”, :action=>“gruppo_utenti”}
Bene.
ma mi chiedo dove sta l’errore ?
Hai gi� fatto il restart del server? (� necessario quando si modifica
routes.rb.)
si ma per ulteriore conferma restarto ora !
inoltre nella index ho inserito
<%= link_to 'Chiamate' ,gruppo_utenti_users_path(user) ,
:method=>'get' %>
ora l'errore e'
ed all'indirizzo
http://localhost:3000/users/gruppo_utenti.#
credo che l'array lo stia passando
saluti Fdibenedetto
Routing Error
No route matches “/users/gruppo_utenti.” with {:method=>:get}
solo che non riesco a trovare informazioni utili sulla configurazione di
route in italiano oppure qualch’uno in grado di spiegarmelo !
Purtroppo in italiano c’è ben poco. Suggerirei di fare uno sforzo per
imparare dalla documentazione in inglese. Se hai domande specifiche,
chiedi
pure qui.
<%=h Phone.find_by_user_id(user.id).to_s.split%>
funziona perfettamente mi restituisce chiaramente l'intero array
ma se io volessi ricevere solamente un campo dell'intera tabella ?
In generale ti consiglio di mettere chiamate di questo tipo (find)
all’interno del controller e non direttamente nelle view. Puoi
assegnarle a
una variabile d’istanza e poi usare quella variable nella view.
In ogni caso, se hai un’associazione tra Phone e User, non hai bisogno
di
fare find_by_user_id, puoi semplicemente usare user.phone (o user.phones
se
è 1-to-many, ma in tal caso ti restituisce un array).
Per accedere a un campo specifico (assumendo una relazione 1-to-1 tra
Phone
e User) puoi fare:
user.phone.my_field
Dove my_field è l’attributo del modello Phone che ti interessa.
Se l’associazione che hai dichiarato è 1-to-many, puoi ottenere il valore
di
my_field per il primo numero di telefono associato con un dato user, in
questo modo:
user.phones.first.my_field
user.phones ti restituisce un array di oggetti Phone associati
all’utente
user (istanza di User). Con first ottieni il primo.
<%=h Phone.find_by_user_id(user.id).to_s.split%>
funziona perfettamente mi restituisce chiaramente l'intero array
ma se io volessi ricevere solamente un campo dell'intera tabella ?
In generale ti consiglio di mettere chiamate di questo tipo (find)
all’interno del controller e non direttamente nelle view. Puoi
assegnarle a
una variabile d’istanza e poi usare quella variable nella view.
In ogni caso, se hai un’associazione tra Phone e User, non hai bisogno
di
fare find_by_user_id, puoi semplicemente usare user.phone (o user.phones
se
� 1-to-many, ma in tal caso ti restituisce un array).
Per accedere a un campo specifico (assumendo una relazione 1-to-1 tra
Phone
e User) puoi fare:
user.phone.my_field
Dove my_field � l’attributo del modello Phone che ti interessa.
Se l’associazione che hai dichiarato � 1-to-many, puoi ottenere il valore
di
my_field per il primo numero di telefono associato con un dato user, in
questo modo:
user.phones.first.my_field
user.phones ti restituisce un array di oggetti Phone associati
all’utente
user (istanza di User). Con first ottieni il primo.
Ciao Antonio ,
La relazione ed di 1 a molti semmai pensavo di deinire nel controller
una def di questo tipo
def ricerca_phone(user_id)
@phone=Phone.find(:first, conditions=>[“user_id=? and phonetype=1”
,user_id ])
if @phone.nil?
@ricerca_phone=phone.number
else
@ricerca_phone=1
end
end
nella view chiaramente inserirei
td with=“5%”><%=h ricerca_phone(user.id).to_s.split%>
Saluti Fabio
Antonio scusa se ti disturbo ancora ma mi occorre risolvere questo
problema
allora nell’ application_controller ho ridefinito la funzione
def self.searchphone(user)
@searchphones= find(:first, conditions=>[“user_id=? and
phonetype=1”,user[:id]]) @searchphones.each do |p| @searchphone = p.number
end
end
nella view ho inserito
<% Phone.searcphone(user) %>
ma mi da l'errore:
undefined method `searcphone' for #
ma dove commetto l'errore mi potresti dare aiuto?
grazie
fdibenedetto
Il 31 agosto 2010 16:29, Fabio Di benedetto [email protected] ha scritto:
end
Ciao,
a parte il typo che ti hanno già segnalato, nota che stai assegnando
ogni volta p.number a @searchphone, per cui alla fine @searchphone
varrà l’ultimo p.number incontrato, e non credo sia quello che vuoi.
allora nell’ application_controller ho ridefinito la funzione
def self.searchphone(user)
@searchphones= find(:first, conditions=>[“user_id=? and
phonetype=1”,user[:id]]) @searchphones.each do |p| @searchphone = p.number
end
end
Fabio, ti suggerirei di leggere un tutorial, perché secondo me ti mancano
un
po’ le basi ora come ora. Ci sono molti problemi col codice qui sopra.
Potresti usare il seguente scenario.
Controller
def my_action
user = … @phones = user.phone.find_all_by_phonetype(1)
end
View
<% @phones.each do |phone| %>
<%=h phone.number %>
<% end -%>
allora nell’ application_controller ho ridefinito la funzione
def self.searchphone(user)
@searchphones= find(:first, conditions=>[“user_id=? and
phonetype=1”,user[:id]]) @searchphones.each do |p| @searchphone = p.number
end
end
Fabio, ti suggerirei di leggere un tutorial, perch� secondo me ti mancano
un
po’ le basi ora come ora. Ci sono molti problemi col codice qui sopra.
Potresti usare il seguente scenario.
Controller
def my_action
user = … @phones = user.phone.find_all_by_phonetype(1)
end
View
<% @phones.each do |phone| %>
<%=h phone.number %>
<% end -%>
Ciao,
Antonio
Antonio scusa ancora ma se nel def faccio questo tipo di selezione avro
tutti i numeri con type… =1 semmai a me serve user_id ? and
typephone=1 ecco perche metto il codice anche nella view perche dal
ciclo della view ricevo l’id da passare alla def per ricevere il number
Grazie Sempre
Fdibenedetto
Il 31 agosto 2010 17:41, Fabio Di benedetto [email protected] ha scritto:
Antonio C. wrote:
Controller
def my_action
user = … @phones = user.phone.find_all_by_phonetype(1)
qui credo ci sia un typo, probabilmente dovrebbe essere @phones = user.phones.find_all_by_phonetype(1)
Antonio scusa ancora ma se nel def faccio questo tipo di selezione avro
tutti i numeri con type… =1 semmai a me serve user_id ? and
typephone=1
Se hai un’associazione uno a molti in cui un user ha molti phone,
scrivere: @phones = user.phones.find_all_by_phonetype(1)
è equivalente a scrivere: @phones = Phone.find :all, :conditions => {:user_id => user.id,
:phonetype => 1}
Ad alcun* i metodi find_by_qualcosa non piacciono, altri li adorano,
sono gusti; usare l’associazione anziché passare l’id esplicitamente
mi sembra invece oggettivamente molto più leggibile - anche se poi è
più o meno la stessa cosa, l’SQL generato non cambia…