Salve a tutti,
premesso che sono alle prime armi e che provengo da asp.net (del quale
sono molto esperto) ho bisogno del vostro aiuto per il seguente
problema:
Devo creare un form di ricerca, con un dropdown list, e bottone.
Una volta premuto il bottone, devo eseguire la ricerca e mostrare i
risultati.
Ecco il codice di ricerca contenuto nel list.rhtml
<% form_tag :action => “search” do %>
Progetto: <%= collection_select(‘ticket’, ‘project_id’, @projects ,
‘id’, ‘name’) %>
<%= submit_tag “Cerca” %>
<% end %>
Mentre questa è la definizione search contenuta nel controllo.
def search
@temp = Ticket.find(:all,:conditions => [“project_id = ?”,
params[:project_id]])
if @temp.lenght > 0
@ticket_pages , @tickets = paginate @temp , :per_page => 10
@projects = Project.find :all
flash[:notice] = ‘Ricerca completata.’
else
flash[:notice] = ‘Non sono stati trovati ticket associati al
progetto selezionato.’
end
redirect_to :action => ‘list’
end
Mi spiace disturbarvi, ma purtroppo, in rete ho grosse difficoltà nel
ricercare questi tipi di how-to.
Grazie mille in anticipo
Ventura
ventura
January 22, 2007, 10:11pm
2
scusa ma non ho capito cosa ti manca, a prima vista il codice sembra ok,
ah
magari al posto di if @temp.lenght > 0 usa anche solo if @temp o if
!@temp.empty ? o almeno io uso queste e mi sembrano un più belle :]
cmq se ti manca la parte della vista basta che scrivi una cosa del tipo
<% for ticket in @tickets %>
<%= ticket.FIELD_NAME %>
<% end %>
Saluti Andrea
----- Original Message -----
From: “Ventura” [email protected]
To: [email protected]
Sent: Monday, January 22, 2007 8:32 PM
Subject: [ruby-it] Dropdown list
def search
redirect_to :action => ‘list’
ventura
January 22, 2007, 10:18pm
3
ciao, scusami per la poca chiarezza,
dapprima non riuscivo a reperire il valore per eseguire la query, ora ci
sono riucito usando:
def search
@temp = Ticket.find(:all,:conditions => [“project_id = ?”,
params[:search][:project_id]])
@projects = Project.find :all
if !@temp.empty ?
26 @ticket_pages , @tickets = paginate @temp , :per_page => 10
flash[:notice] = ‘Ricerca completata.’
else
flash[:notice] = ‘Non sono stati trovati ticket associati al
progetto selezionato.’
end
render :action => ‘list’
end
ora il problema è che non riesco a fare il paginate, cioè ho il seguente
errore:
NameError in TodoController#search
“#Ticket:0x3132e48 ” is not a valid constant name!
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/inflector.rb:247:in
constantize' /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/core_ext/string/inflections.rb:148:in
constantize’
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/pagination.rb:195:in
paginator_and_collection_for' /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/pagination.rb:130:in
paginate’
#{RAILS_ROOT}/app/controllers/todo_controller.rb:26:in `search’
c’e’ qualche workaround?
ventura
January 22, 2007, 10:43pm
4
problema risolto con:
@tickets = Ticket.find(:all,:conditions => ["project_id = ?",
params[:search][:project_id]])
@projects = Project.find :all
@ticket_pages = Paginator.new self, @tickets.size , 10
if !@tickets.empty ?
if @tickets.size == 1
flash[:notice] = ‘Ricerca completata. ’ +
@tickets.size.to_s + ’ record trovato.’
else
flash[:notice] = ‘Ricerca completata. ’ +
@tickets.size.to_s + ’ record trovati.’
end
else
flash[:notice] = ‘Non sono stati trovati ticket associati al
progetto selezionato.’
end
render :action => ‘list’
grazie a tutti
ventura
January 22, 2007, 10:48pm
5
penso che l’ errore stia nel fatto che tu gli passi una variabile di
istanza
@temp e non un modello.
@ticket_pages , @tickets = paginate :ticket, :per_page => 10, :conditions
=>
[“project_id = ?”, params[:search][:project_id] ]
cmq anche per me all’ inizio è stato davvero poco chiaro il paginate
Saluti Andrea
----- Original Message -----
From: “Ventura V.” [email protected]
To: [email protected]
Sent: Monday, January 22, 2007 10:18 PM
Subject: [ruby-it] Re: Dropdown list
26 @ticket_pages , @tickets = paginate @temp , :per_page => 10
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/pagination.rb:130:in
paginate' #{RAILS_ROOT}/app/controllers/todo_controller.rb:26:in
search’
c’e’ qualche workaround?
–
Posted via http://www.ruby-forum.com/ .
ventura
January 22, 2007, 10:50pm
6
secondo me hai fatto un casino
con la stringa che ti ho dato dovresti far meglio no?
o almeno io mi son trovato molto bene.
----- Original Message -----
From: “Ventura V.” [email protected]
To: [email protected]
Sent: Monday, January 22, 2007 10:43 PM
Subject: [ruby-it] Re: Dropdown list
else
–
Posted via http://www.ruby-forum.com/ .
ventura
January 22, 2007, 11:01pm
7
Grazie stb,
solo una cosa, quando cambio pagina va in errore
NoMethodError in TodoController#search
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
RAILS_ROOT: /Users/DAddYE/Documents/RubyOnRails/ToDo/public/…/config/…
Application Trace | Framework Trace | Full Trace
#{RAILS_ROOT}/app/controllers/todo_controller.rb:24:in `search’
e la riga 24 corrisponde a @ticket_pages , @tickets = paginate :ticket,
:per_page => 10, :conditions
=>
[“project_id = ?”, params[:search][:project_id] ]
Grazie mille di tutto, ma queste tips veramente sono difficili da
reperire
ventura
January 22, 2007, 11:33pm
8
Si infatti i params sono vuoti…
bisognerebbe usare qualcosa di simile
<% search_params = @params [:search].collect {|k,v|
[“search[#{k.to_s}]”, v]}.flatten.to_h %>
ma non ho idea di come si applichi al mio caso.
http://wiki.rubyonrails.com/rails/pages/PaginationHelper
Spero che col tempo le cose migliorino… vorrei lasciare
definitivamente asp.net
stb wrote:
bho vista cos’ mi sembra ok ma potrei sbagliarmi, cmq hai controllato
che
params[:search][:project_id] non sia vuota?
cmq non è che sti tips son difficili da trovare è che all’ inizio rails
è un
macello :]
Saluti Andrea
----- Original Message -----
From: “Ventura V.” [email protected]
To: [email protected]
Sent: Monday, January 22, 2007 11:01 PM
Subject: [ruby-it] Re: Re: Dropdown list
–
Posted via http://www.ruby-forum.com/ .
ventura
January 22, 2007, 11:29pm
9
bho vista cos’ mi sembra ok ma potrei sbagliarmi, cmq hai controllato
che
params[:search][:project_id] non sia vuota?
cmq non è che sti tips son difficili da trovare è che all’ inizio rails
è un
macello :]
Saluti Andrea
----- Original Message -----
From: “Ventura V.” [email protected]
To: [email protected]
Sent: Monday, January 22, 2007 11:01 PM
Subject: [ruby-it] Re: Re: Dropdown list
–
Posted via http://www.ruby-forum.com/ .
ventura
January 23, 2007, 11:33am
10
bhe scusa ma se hai pochi parametri prendili direttamente, controlla i
field della vista che per esempio tra un text_field e un text_field_tag
cambia la sintassi, probabilmente stai sbagliando una cosa del genere
Saluti Andrea
Ventura V. wrote:
Si infatti i params sono vuoti…
bisognerebbe usare qualcosa di simile
<% search_params = @params [:search].collect {|k,v|
[“search[#{k.to_s}]”, v]}.flatten.to_h %>
ma non ho idea di come si applichi al mio caso.
Peak Obsession
Spero che col tempo le cose migliorino… vorrei lasciare
definitivamente asp.net
ventura
January 23, 2007, 9:04pm
11
oppure:
flash.now[:notice] = “Hello current action”
che vale solo per la action corrente
On 1/23/07, Matteo V. [email protected] wrote:
flash[:notice] = 'Ricerca completata. <br />' +
<% if @tickets.size == 0 %>
Nessun risultato trovato
<% else %>
…
<% end %>
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
–
Paolo D.’
SeeSaw | Another point of view
A creare software sono tantissimi, a farlo molto bene c’è una certa schiera di sviluppatori, ma a costruirlo un pezzo alla volta insieme al cliente, plasmarlo sulle sue esigenze e renderlo parte di un nuovo approccio al mondo del lavoro sono davvero...
[email protected]
personal http://paolodona.blogspot.com
ventura
January 23, 2007, 8:17pm
12
On 1/22/07, Ventura V. [email protected] wrote:
else
flash[:notice] = 'Ricerca completata. <br />' +
@tickets.size.to_s + ’ record trovati.’
end
else
flash[:notice] = ‘Non sono stati trovati ticket associati al
progetto selezionato.’
end
render :action => ‘list’
grazie a tutti
Giusto per puntualizzare: flash[:notice] si usa quando devi passare un
messaggio attraverso una redirect. In questo caso giustamente hai
tolto la redirect, che non c’entrava nulla visto che stai facendo un
metodo da chiamare con GET e non con POST. Quindi il tuo messaggio
puoi passarlo con una semplice variabile tipo @message .
Ancora meglio, il testo del tuo messaggio tienilo nella view, tipo
<% if @tickets.size == 0 %>
Nessun risultato trovato
<% else %>
…
<% end %>
ventura
January 23, 2007, 10:15pm
13
quanto siete puntigliosi dasdassda
----- Original Message -----
From: “Paolo Donà” [email protected]
To: “ruby-it” [email protected]
Sent: Tuesday, January 23, 2007 9:02 PM
Subject: Re: [ruby-it] Re: Dropdown list