2013-01-11 11 views
5

"Rails Way"を使ってメーラーに確認用URLを追加するのは難しいです。Rails:カスタムURLヘルパーを組み込みのように動作させる_path&_urlヘルパー

PUTリクエストができないため、テキストメールでは難しいので、これを純粋にRESTfulにしないことを選択しています。

はので、ここで私のroutes.rbをです:get 'confirm/:id' => 'Confirmations#confirm'

と私のメーラーに私はURLが発生したいemail_confirm_url(@user.email_token)を入れたいと思います。

私はヘルパーを作成しました:

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

私はemail_confirm_url(@user.email_token)を呼び出す場合を除いて、ソートのこのすべての作品、...

私は文字通り取得: "/confirm/abcdefg…"

を私が欲しいものである場合には: http://myhostname/confirm/abcdefg…

または開発中:http://localhost:3000/confirm/abcdefg…

URLヘルパーは、組み込みの<resource>_path<resource>_urlヘルパーのように動作するようにするにはどうすればよいですか?現実的に私は本当にが必要だと思うが、_urlが必要だと思う。

#Edit:私は私の環境の設定でこれを持っている:

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

答えて

0

あなたのメーラーのためのコントローラでこの機能を実装して、テンプレートに渡す必要がありrequestオブジェクトにアクセスするためには、変数。

アプリ/メーラー/ emailer.rb

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

アプリ/ビュー/ Emailerの/ template_name.html.erb

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

'ActionView :: Template :: Error:未定義のメソッド 'host' for nil:NilClass'メーラーで' host'または 'host_with_port'にアクセスできないということを覚えていますか?これはどうですか?上記のコメントに基づいて – Meltemi

+0

が更新されました。 – zarazan

0

何すでに既存のURLプラス連結を使用してはどうですか?私。 root_pathroot_urlを使用すると、連結して、動作はまったく同じです!

たとえば、あなたがこれを行うことができます。

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

そして、あなたが行われています。簡単で唯一の必要条件はでルートルートをroutes.rbに設定します。また、development.rbで設定したオプションを使用すると、メーラーでも動作します。

+0

Qは、ビューから 'mystrangemethod_url'に透過的にアクセスする方法によく似ていると思います。 – mlt

関連する問題