Добавление переменных в маршруты / пути URL в почтовой программе Rails3 - PullRequest
0 голосов
/ 27 апреля 2011

Я искал ответ на простой вопрос.Может ли кто-нибудь указать мне правильное направление или хотя бы сказать мне, что я должен искать?

Я внедряю систему бета-приглашений Rails3 а-ля Райан Бейтс - http://railscasts.com/episodes/124-beta-invitations

Почта генерирует относительную ссылку.Как подготовить путь к хосту?(У меня уже есть config.action_mailer.default_url_options, настроенный в файле development.rb)

- соответствующие биты моего файла маршрутов.

devise_for :users,  :path_prefix => 'registration', :controllers => {:registrations => 'users/registrations'} do
    get   "registration/users/sign_up/:invitation_token" => "users/registrations#new"
  end

Я внес некоторые незначительные изменения, чтобы отразитьобновления в Rails и приятно играть с Devise.Контроллер теперь выглядит следующим образом:

class InvitationsController < ApplicationController
  def new
    @invitation = Invitation.new
    @title = "Invite a friend"
  end

  def create
    @invitation = Invitation.new(params[:invitation])
    @invitation.sender = current_user
    if @invitation.save
        if user_signed_in?
            Mailer.invitation(@invitation, new_user_registration_path(@invitation.token)).deliver
            redirect_to root_url, :notice => "Thank you, your friend will receive their invitation soon."
        else
            redirect_to root_url, :notice => "Thank you, we'll let you know when the next batch of invites are availale."
        end
    else
        if current_user.invitation_limit > 0
            render :action => 'new', :alert => "Sorry, there was a problem! Please try a again."
        else
            redirect_to root_url, :alert => "Sorry, you don't have any invitations left. Please wait until we issue more."
        end

    end
  end
end

А вот почтальон:

class Mailer < ActionMailer::Base

  def invitation(invitation, sign_up)

    subject     'Invitation'
    recipients  invitation.recipient_email
    @greeting = "Hi"
    @invitation = invitation
    @signup_url = sign_up
    @sender = invitation.sender_id
    invitation.update_attribute(:send_at, Time.now)       
  end
end

Я ценю любые указатели, которые помогут лучше понять, почему это происходит.

Спасибо!

1 Ответ

1 голос
/ 27 апреля 2011

Первая проблема в том, что вам нужно new_user_registration_url вместо new_user_registration_path.Url = абсолютный, путь = относительный.

Возможно, вам понадобится показать нам ваши маршруты для решения второй проблемы.Похоже, ваш параметр обрабатывается как формат.Возможно, вам нужно пользовательское сопоставление?Примерно так:

match '/users/sign_up/:token' => 'users#sign_up', :as => :new_user_registration

Поскольку вы настроили default_url_options, я ожидаю, что вы сможете вызывать хелпер url в представлении почтовой программы, а не передавать его из контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...