Salve a tutti,
avrei bisogno di una dritta, non sono un grande esperto
di Rails e non capisco se sbaglio la sintassi o proprio il procedimento.
Nella vista index voglio visualizzare i topic di una discipline (da
selezionare):
ho pensato di fare un render nella action index a selectdiscipline per
poi tornare e visualizzare i topics.
topics_controller.rb
…
def index
@disciplines = Discipline.find(:all, :order => “denomination”)
render :action => ‘selectdiscipline’
@cod = params[:coddiscipline]
@discipline = Discipline.find(@cod)
@topics = Topic.find :all, :order => "denomination", :conditions =>
[“discipline_id = ?”, @discipline.id ]
end
selectdiscipline.html.erb
<%= form_tag({:action => ‘index’}, :remote => true) do %>
materia:
<% for discipline in @disciplines %>
<option value= “<%= h discipline.id %>” <%= h
discipline.denomination %>
<% end %>
<%= submit_tag " Visualizza MODULI " %>
<% end %>
… invece non mi fa selezionare alcunché e mi scrive:
ActiveRecord::RecordNotFound in TopicsController#index
Couldn’t find Discipline without an ID
Rails.root: C:/verifiche
Application Trace | Framework Trace | Full Trace
app/controllers/topics_controller.rb:24:in `index’
Grazie a chi ci darà un’occhiata!
magpie
May 23, 2011, 1:54pm
#2
La action del controller unica?
Dovresti spezzarla in 2: una che torna l’elenco delle discipline e
l’altra che dopo la selezione della disciplina visualizza i topic.
Per come l’hai scritta tu esegue entrambe nell’index…e la parte che
recupera il topic non funziona…infatti li che da errore:
qui params vuoto!
@cod = params[:coddiscipline]
@discipline = Discipline.find(@cod )
@topics = Topic.find :all, :order => “denomination”, :conditions =>
[“discipline_id = ?”, @discipline.id ]
ciao
magpie
May 23, 2011, 8:02pm
#3
Ciao Emanuele, GRAZIE MILLE!
ho separato il controller così:
Memorizza tutti i moduli inseriti e seleziona la disciplina
def index
@disciplines = Discipline.find(:all, :order => “denomination”)
render :action => ‘selectdiscipline’
end
visualizza i moduli della disciplina selezionata
def index2
@cod = params[:coddiscipline]
@discipline = Discipline.find(@cod )
@topics = Topic.find :all, :order => “denomination”, :conditions =>
[“discipline_id = ?”, @discipline.id ]
end
ed in ‘selectdiscipline.html.erb’ ho scritto:
<%= form_tag({:action => ‘index2’}, :remote => true) do %>
però adesso mi dà:
“No route matches {:action=>“index2”, :controller=>“topics”}”
(in route.rb ho scritto “resources :topics”)
qualche altro suggerimento?
magpie
May 24, 2011, 3:57pm
#4
Ho risolto mettendo in routes.rb
post ‘topics/index2’
Grazie ancora!