سؤال

أنا أعمل على البريد الإلكتروني النسج التقليدي إلى حد ما - أريد إرسال بريد إلكتروني إلى المستخدم تغيير كلمة المرور مدمجة في رابط يمكن النقر فوقه لتغيير كلمة المرور الخاصة بهم. أنا أرسل عبر البريد الإلكتروني عبر ActionMailer التقليدي.

إذا استخدمت علامة Link_to العادية

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>

أحصل على رابط نسبي - عديم الفائدة إلى حد ما من بريد إلكتروني.

إذا كنت أضيف في

:only_path => false, ، ثم أخطاء يقول أنني بحاجة إلى ضبط default_url_options[:host]. وبعد تقوم مستندات ActionController بمروحية أنك تقوم بذلك عن طريق تجاوز طرق #Default_Url_Options في وحدة التحكم الخاصة بك. بالتأكيد هناك خيار تكوين لمعرفة القضبان ما هو اسم المضيف هو دون إضافة ملف التكوين الخاص بي، وتحليله، إلخ؟

هل كانت مفيدة؟

المحلول

default_url_options متاح من config.action_mailer وينبغي تعيين في ملف تكوين البيئة الخاص بك.

على سبيل المثال، في config/environments/production.rb:

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}

للاختبار المحلي، تعديل config/environments/development.rb:

config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}

ثم، على افتراض أن لديك طريق اسمه يسمى forgot_password_login, ، يمكنك إنشاء عنوان URL رابط تسجيل الدخول في Mailer الخاص بك باستخدام شيء مثل هذا:

forgot_password_login_url(:token => 'a7s8q15sk2...')

نصائح أخرى

ربما تريد تعيين: البروتوكول => 'https' كذلك، راجع للشغل.

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}

هناك بديل آخر، كما هو موضح في http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-mailer/

هذا الحل لديه ميزة أنه لا يتطلب أي تكوين (أقل من المتاعب)، ويعمل بشكل جيد طالما قمت بإرسال رسائل البريد الإلكتروني من داخل وحدات التحكم.

ولكن إذا كنت تخطط لإرسال بريد إلكتروني دون المرور عبر وحدة تحكم (على سبيل المثال من سطر الأوامر أو استجابة لبريد إلكتروني آخر)، فأنت بحاجة إلى التكوين الثابت.

ضبط default_url_options يتم إهمال مباشرة في القضبان 3.1. يستخدم URL_FOR. في حين أن.

إضافة المعلمة :protocol لتجاوز القيمة الافتراضية (HTTP)، :protocol => 'https://'. وبعد سيؤدي ذلك إلى إنشاء عنوان URL الذي يبدأ ب "HTTPS: // ..." بدلا من الافتراضي "http: //"

ومن المثير للاهتمام، كان لدي نفس المشكلة كما فعلت، ولكن في اختبارات الوحدة (أثناء اتباع سريات مايكل هارتل). كان لدي هذا الخط في ملف Test.rb الخاص بي، لكن ذلك لم يساعد:

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' }

أضفت أيضا خطا آخر مثل هذا ل Test.rb، ومدهشا حل المشكلة

default_url_options = { host: 'example.com', protocol: 'http' }

يتم إهمال إعداد Default_url_Options مباشرة في القضبان 3.1

استخدم مساعد URL_FOR لإنشاءه:

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %>

يمكنك فقط القيام به

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top