2011-12-12 30 views
5

Tôi đang phát triển một ứng dụng Rails v2.3.2.link_to định nghĩa đường dẫn

Tôi có một bộ điều khiển:

class SchoolController < ApplicationController 
    ... 

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

    end 

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

end 

trong app/views/schools/edit.html.erb Tôi muốn có một link, click vào nó sẽ kích hoạt các phương pháp check_teachers trong khiển, làm thế nào để xác định đường cho link này ?

app/views/trường/edit.html.erb:

link_to 'Check teachers' WHAT_IS_THE_PATH_HERE 

Trả lời

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

hoặc

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

hoặc bạn có thể định nghĩa một tên-tuyến đường trong config/routes.rb như thế này:

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

và gọi trình trợ giúp url tạo ra bởi các tên-con đường như thế này:

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

và bạn có thể sử dụng id này để tìm giáo viên trong bộ điều khiển

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

howd bạn nhận được url 'check_teachers_path'? Có cách nào để kiểm tra xem url nào có sẵn hay đây là định dạng đặt tên cụ thể không? Cảm ơn! – ddolce

+0

'các tuyến đường rake' sẽ cung cấp cho bạn cả URL và trình trợ giúp url nếu nó có sẵn. – rubyprince

+0

bạn có nghĩa là cột 'Tiền tố '? Vì vậy, trong trường hợp này tôi sẽ thấy 'check_teachers' phải không? Và tất cả những gì tôi cần làm là nối thêm '_path' vào nó? – ddolce

2

Bạn có thể xác định một cái gì đó như thế này trong tập tin routes.rb của bạn.

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

Sau đó bạn muốn thiết lập của bạn link_to như sau:

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

Bạn sẽ cần phải thêm chút mã này vào bộ điều khiển, như bang mô hình không được chia sẻ giữa các hành động điều khiển:

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

Điều này chưa được kiểm tra nhưng nên hoạt động. Chỉ cần bình luận nếu bạn có thêm bất kỳ vấn đề nào.

Các vấn đề liên quan