在Rails中使用RESTful路由进行延迟注册

时间:2011-12-07 16:16:41

标签: ruby-on-rails rest ruby-on-rails-3.1 registration rails-routing

我很难搞清楚最佳做法......

我希望以用户可以关注汽车的方式创建“跟随”系统(在汽车价格变化时获取电子邮件更新等)。令我头疼的实现部分是我想通过仅使用电子邮件引入延迟注册。

所有都需要以AJAX 请求的方式运行。

在界面中,会有一个触发跟随操作的按钮,用于检查用户是否已注册。如果用户已登录,请创建新的CarSubscription项目,否则显示可以键入其电子邮件地址的表单。提交后,表单应创建一个没有密码的用户(如果存在电子邮件,请求输入密码并登录),然后创建关系项。

此处的挑战是在将表单提交到CREATE的{​​{1}}操作后使用重定向。由于我无法使用CarSubscriptionController重定向,因此我无法模拟POSTCREATE操作。

非RESTful解决方案是在DESTROY下创建2个操作:关注和取消关注,让他们执行创建条目和删除条目的逻辑。这样我就可以存储请求路径,并在用户输入电子邮件并登录后使用它。

如何使用RESTful资源实现我想要的目标?

在尝试描述我的问题后,似乎太复杂了,我确实非常困难......在这种情况下,有3个不同的控制器,可能还有4个请求。

非常感谢任何帮助!

请参阅下面的流程图: flow chart of follow action

2 个答案:

答案 0 :(得分:1)

这里不是专家,我不知道这是否是最佳解决方案,但我在类似情况下所做的是:

  1. 在您的控制器中,使用javascript回复,而不是重定向用户
  2. 在您的javascript文件中,使用$.post(...)向您的控制器操作发出POST
  3. Etvoilà!
  4. 您也可以使用ActiveResource来实现这一目标,但实际上我从未尝试过这个解决方案:http://api.rubyonrails.org/classes/ActiveResource/Base.html#label-Custom+REST+methods

    Person.new(:name => 'Ryan').post(:register)
    

    希望这有帮助

答案 1 :(得分:1)

我有一个非常相似的需求,并且无法将有关如何使用Devise和Rails的各种信息拉到一个工作示例中。这是一个基于Rails 4,Ruby 2和Devise 3.0的完整工作示例:

https://github.com/mwlang/lazy_registration_demos