Rails3 приглашения и почтовые программы - как добавить переменные в маршруты / URL? - PullRequest
1 голос
/ 29 апреля 2011

Это должно быть простое исправление, но я не смог найти ответ. Кто-нибудь может указать мне правильное направление?

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

Я настроил почтовую программу для отправки URL-адресов приглашений. Все отлично работает, кроме одной маленькой проблемы.

URL, сгенерированный почтовой программой, является /user/sign_up.token.

Мне нужно сгенерировать / user / sign_up / token (косая черта вместо точки).

Я думаю, мне нужно изменить синтаксис в "Mailer.invitation (). Delivery", но я не могу найти какую-либо документацию, чтобы помочь. Кто-нибудь может указать мне правильное направление?

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

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

Контроллер приглашений:

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

Mailer:

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

Спасибо за любые идеи!

Ответы [ 2 ]

3 голосов
/ 29 апреля 2011

Не совсем уверен, будет ли это работать, но, возможно, попробуйте

new_user_registration_url(@invitation.token)

вместо new_user_registration_path.

Другой (но не очень хороший) метод будет

new_user_registration_url+"/#{@invitation.token}" #substitute path for url maybe

Надеюсь, это поможет!

0 голосов
/ 01 мая 2011

Измените свой маршрут на

get   "registration/users/sign_up/:id" => "users/registrations#new"

и добавьте его к своей модели приглашения:

def to_param
  "#{token}"
end

Тогда вы можете просто использовать

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