2010-03-11 49 views
0

我不确定这里是否有单个问题,或者我以错误的方式接近了这一点,但任何建议都将不胜感激!意大利面条路线和邀请编码Bolognese

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

电子邮件的末尾标有激活码。示例url将是“/user/new/xxxxxxxxx”。

问题出在这里:我需要同事能够创建一个用户帐户,只需要他们的基本信息,以便他们可以登录帐户并设置应用程序的角落。

当同事在用户注册表单上犯了一个错误时,url忘记了激活码,并且跳回了验证信息和'/ users'的相当裸露的URL。 当同事修改错误并点击注册时,他们将作为完全成熟的用户提交,而不是被邀请的同事。

这是因为,如果条款我有一个的“用户/新页面上

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

我的路由查找网址的代码参数为:

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

就像我之前说,我有没有接近这个完全错误的?这里有一个问题吗?

UPDATE 这Rails的演员情节几乎解决了所有的我是有这个问题:Beta Invitations

虽然来区分,如果该人是从邀请来还是不来我只是用这个条件块:

if [email protected]_id.blank? 

而且效果很好。

回答

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帮助它呈现适当的条件元素的“新”的观点这样。

+0

你是对的,我需要一个隐藏的领域,没有一个虚拟的属性,我不得不使用你的代码。谢谢你的时间。 – 2010-03-15 10:12:51

+0

很高兴帮助:) – Apie 2010-03-16 13:22:19

0

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

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

form_for @user, :url => "https://stackoverflow.com/users/new/#{@activation_code}" do |f| 
# ... 
end 
+0

我试着像你说的那样在网址中添加,但是当我点击提交时,它会将它发送到'users/new/users/new/xxx' - 我似乎无法找到解决方法。我想对URL使用url选项,但隐藏的字段是一个好点! – 2010-03-11 14:41:30

+0

你有':url'选项的前导斜杠? – meagar 2010-03-11 14:44:42

+0

是的,我做到了。我最终使用了我在更新中提到的railscast,并使用了隐藏字段,就像你说的,用虚拟属性来解决问题。感谢您的意见! – 2010-03-15 10:14:31