2012-03-07 29 views
28

Ví dụ, tôi đã xây dựng một chuỗi gọi là "new_work_path", bây giờ tôi muốn gọi helper đó là một phương thức.Làm thế nào để tự động gọi các tuyến đường trợ giúp trong đường ray?

Tôi đã thử send("new_work_path", vars) và gọi cùng một thư gửi từ nhiều đối tượng. Nhưng tôi không nghĩ rằng tôi đã tìm thấy đúng đối tượng để gọi những người giúp đỡ này.

Để làm object.send("new_work_path", vars), đối tượng đối tượng tôi nên tìm kiếm?

Tôi đã cố gắng tìm kiếm trực tuyến này một lúc nhưng không thể tìm thấy bất kỳ điều gì. Nếu bất cứ ai có thể tỏa sáng một số ánh sáng trên này, nó sẽ là tuyệt vời!

Cảm ơn!

+3

Chỉ có thể gọi phương thức trình trợ giúp từ trong ngữ cảnh chế độ xem chứ không phải mô hình nếu đó là những gì bạn đang cố gắng làm. Bạn có thể cụ thể hơn về nơi bạn đang cố thực hiện điều này không? Cuộc gọi 'send' chuẩn phải đủ nếu bạn có ngữ cảnh phù hợp. – tadman

+0

Tôi đang cố gắng thực hiện điều này trong application_helper nơi một cuộc gọi trợ giúp tuyến đường tiêu chuẩn sẽ hoạt động đúng. – gtr32x

+3

Lỗi bạn đang nhận được là gì? Bạn có thể đăng một ví dụ? Nếu gọi 'new_work_path' hoạt động trực tiếp, thì' send (: new_work_path) 'phải tương đương. – tadman

Trả lời

34

thử Rails.application.routes.url_helpers.send(...)

+0

Hoạt động tốt. Xứng đáng "câu trả lời tốt nhất" :) –

+1

Điều này hoạt động tốt. Giả sử bạn muốn liên kết với một tài nguyên lồng nhau, bạn có thể viết 'Rails.application.routes.url_helpers.send (" new _ # {@ model.class.name.downcase} _comment_url "," #{@model.class.name .downcase} _id ".to_sym => @model)', vì bạn cần cha mẹ 'model_id'. – Avishai

+0

Nếu bạn đang cố gắng truy cập vào 'url_helpers' từ một' Rails :: Engine' được gắn kết, hãy thử '" :: Engine ".constantize.routes.url_helpers.send (...) 'trong đó' 'là từ' mount' dòng trong tập tin 'routes.rb' của bạn. – erroric

8

Tệ của tôi, theo @tadman đề xuất, tôi đã cố sử dụng lại send(:new_work_path, args) và đã hoạt động! Phải gõ sai nó trước.

Trước khi tìm ra rằng gửi tác phẩm ngay lập tức, tôi đã tìm thấy một giải pháp mà cũng là mối quan tâm:

new_polymorphic_path(Work, args) 

Mà dường như để cung cấp một số đường cú pháp là tốt.

+0

polymorphic_path rất thú vị, bạn cũng có thể làm 'polymorphic_path (: foo)' hoặc 'polymorphic_path (" bar ")' –

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