Render :action form_tag

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!

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

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? :wink:

Ho risolto mettendo in routes.rb

post ‘topics/index2’

Grazie ancora!