2011-12-12 10 views
5

Sto sviluppando un Rails v2.3.2 app.link_to definizione del percorso

Ho un controllore:

class SchoolController < ApplicationController 
    ... 

    def edit 
    @school=School.find_by_id params[:id] 

    end 

    def check_teachers 
    @teachers = @school.teachers 
    ... 
    end 

end 

in app/views/schools/edit.html.erb mi piacerebbe avere un link, cliccare su di essa attiverà il metodo check_teachers nel regolatore, come definire il percorso per questo link ?

app/views/scuole/edit.html.erb:

link_to 'Check teachers' WHAT_IS_THE_PATH_HERE 

risposta

22
link_to 'Check teachers', :action => :check_teachers, :id => @school.id 

o

link_to 'Check teachers', '/school/check_teachers/#{@school.id}' 

oppure si può definire un percorso-nome in config/routes.rb come questo:

map.check_teachers, '/school/check_teachers/:id' :controller => :school, :action => :check_teachers 

e chiamare l'url-helper generate dalla rotta di nome come questo:

link_to 'Check teachers', check_teachers_path(:id => @school.id) 

ed è possibile utilizzare questo ID per trovare gli insegnanti nel controller

def check_teachers 
    @school = School.find params[:id] 
    @teachers = @school.teachers 
    ... 
end 
+0

come si ottiene l'url 'check_teachers_path'? C'è un modo per verificare quali URL sono disponibili o si tratta di un formato di denominazione specifico? Grazie! – ddolce

+0

'rake routes' fornirà sia l'URL che l'helper dell'URL, se disponibile. – rubyprince

+0

intendi la colonna 'Prefix'? Quindi in questo caso dovrei vedere 'check_teachers 'giusto? E tutto quello che devo fare è aggiungere un '_path' ad esso? – ddolce

2

È possibile definire qualcosa di simile nel file routes.rb.

map.connect "schools/:id/check_teachers", :controller => "schools", :action => "check_teachers" 

Farebbe quindi impostare il tuo link_to come segue:

link_to "Check teachers", check_teachers_path(:id => @school.id) 

Avrai bisogno di aggiungere questo pezzo di codice nel controller, come modello gli stati non sono condivisi tra le azioni del controller:

def check_teachers 
    @school = School.find_by_id(params[:id]) 
    # Then you can access the teachers with @school.teachers 
    end 

Questo non è verificato ma dovrebbe funzionare. Commenta se hai ulteriori problemi.

Problemi correlati