2013-01-11 26 views
5

Tôi đang gặp khó khăn trong việc tìm ra "Đường dẫn" để thêm URL xác nhận email vào bưu phẩm.Rails: làm cho trình trợ giúp URL tùy chỉnh hoạt động như người trợ giúp _path & _url được xây dựng

Tôi chọn không làm điều này hoàn toàn yên tĩnh bởi vì, tốt, thật khó với email văn bản vì chúng không thể yêu cầu PUT.

vì vậy đây là routes.rb của tôi: get 'confirm/:id' => 'Confirmations#confirm'

và bưu phẩm của tôi, tôi muốn đặt email_confirm_url(@user.email_token) nơi tôi muốn URL xảy ra.

Tôi tạo ra một helper:

#app/helpers/confirmations_helper.rb 
module ConfirmationsHelper 
    def email_confirm_url(token) 
    "/confirm/#{token}" 
    end 
end 

này tất cả các công trình, loại, trừ khi tôi gọi email_confirm_url(@user.email_token) ...

Tôi nghĩa là nhận được: "/confirm/abcdefg…"

Khi những gì tôi muốn là: http://myhostname/confirm/abcdefg…

Hoặc đang phát triển: http://localhost:3000/confirm/abcdefg…

Tôi làm cách nào để người trợ giúp URL của tôi hoạt động giống như người xây dựng trong <resource>_path<resource>_url người trợ giúp trong Rails? mặc dù thực tế tôi cho rằng tôi thực sự chỉ cần cần_url.

# chỉnh sửa: Tôi có điều này trong cấu hình môi trường của tôi:

#config/environments/development.rb 
... 
config.action_mailer.default_url_options = { :host => "localhost:3000" } 

Trả lời

0

Để truy cập các đối tượng yêu cầu bạn nên thực hiện chức năng này trong bộ điều khiển cho bưu phẩm của bạn và vượt qua nó để mẫu với một biến.

app/bưu phẩm/emailer.rb

@tracking_url = "http://#{request.host}:#{request.port}/confirm/#{token}" 

app/view/emailer/template_name.html.erb

<%= link_to 'name', @tracking_url %> 
+0

'ActionView :: Mẫu :: Lỗi: phương thức không xác định 'máy chủ' cho nil: NilClass' Tôi nghĩ rằng tôi nhớ điều gì đó về việc không có quyền truy cập vào' host' hoặc 'host_with_port' trong Mailers?!? Bất kỳ cách nào xung quanh điều này? – Meltemi

+0

câu trả lời được cập nhật dựa trên nhận xét ở trên, hãy cho tôi biết nếu nó hoạt động. – zarazan

0

gì về việc sử dụng một địa chỉ đã tồn tại cộng nối? I E. bạn có thể sử dụng root_pathroot_url, sau đó bạn nối và hành vi chính xác giống như đường ray!

Ví dụ, bạn có thể làm điều này:

def mystrangemethod_url(option1, option2) 
    "#{ root_url }/#{ option1 }/#{ option2 }" 
end 

Và bạn đã làm xong. Dễ dàng và yêu cầu duy nhất được đặt đặt đường dẫn gốc của bạn trong routes.rb. Ngoài ra với các tùy chọn bạn đã thiết lập trong development.rb, nó cũng sẽ làm việc trong các bưu phẩm.

+0

Tôi nghĩ rằng Q là giống như làm thế nào để minh bạch truy cập 'mystrangemethod_url' từ một cái nhìn. – mlt

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