0

我不确定这里是否存在单个问题,或者我以错误的方式处理了这个问题,但任何建议都将不胜感激!

在应用程序中,当用户注册时,他们将获得特权并设置他们的页面,然后他们可以通过电子邮件邀请同事。

该电子邮件的末尾标记了一个激活码。示例 url 将是“ /user/new/xxxxxxxxx ”。

这就是问题所在:我需要同事也能够使用他们的基本信息创建一个用户帐户,这样他们就可以登录该帐户并设置他们的应用程序角落。

当同事在用户注册表单上出错时,该 url 忘记了激活码,并返回验证消息和一个非常简单的 '/users' url。当同事修改他们的错误并点击注册时,他们将作为完全成熟的用户提交,而不是被邀请的同事。

发生这种情况是因为我在“用户/新”页面上有一个 if 子句

<% if @activation_code %>
  Show colleague messages of invitation and happiness
<% else %>
  Show fully fledged user ego stroking messages
<% end %>

我查找url的code参数的路由是:

map.signup '/users/new/:code', :controller => 'users', :action => 'new', :code => nil

就像我之前说的,我是否完全错误地处理了这个问题?这里有问题吗?

更新 这个 Rails Cast Episode 解决了我遇到的几乎所有问题:Beta 邀请

虽然为了区分这个人是否来自邀请,我只是使用了这个条件块:

if !@user.invitation_id.blank?

效果很好。

4

2 回答 2

1

我猜你的控制器看起来像这样:

def create
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

问题是视图中不再有@activation_code。因此,我建议您将activation_code 传递回隐藏的表单字段中。

def create
  @activation_code = params[:activation_code]
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

这样,当您从创建操作呈现“新”视图时,您的视图仍将具有所需的 @activation_code 以帮助它呈现适当的条件元素。

于 2010-03-11T14:38:25.373 回答
0

一旦他们使用确认码访问了该页面,您可能会考虑在标签中包含确认码,<input type="hidden" />以确保在回发之间保存它。

否则,您需要修改注册表单的操作以包含激活码;像这样的东西:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
于 2010-03-11T14:32:40.703 回答