自定义休息路线的最佳实践

时间:2011-05-25 20:34:58

标签: ruby-on-rails ruby-on-rails-3

在我的网络应用程序中,我通过电子邮件进行了典型的用户激活过程。

目前我对激活过程中的每一步都有一个自定义控制器操作,即我有一个“激活”操作,或多或少简单地呈现“注册”页面,然后我有另一个动作“激活“这是实际表格在登记页面上的目标行动。

我想知道这是最佳做法吗? - 现在,我即将实施管理员启动的密码重置(管理员点击一个链接以便在特定用户上重置密码,用户会收到一封电子邮件,其中包含指向他可以设置新密码的页面的链接) 。我会更进一步,再增加3个控制器动作(一个用于发送重置电子邮件,一个用于访问重置页面的用户,另一个用于实际重置表单的操作)。

这似乎让我的控制器变得非常混乱,我想知道这是否是“正确”的方式呢?

thx任何建议

1 个答案:

答案 0 :(得分:2)

您正在做的事情很好 - 没有必要将您的控制器操作符合RESTful操作。 REST应仅在适合您的模型时使用,但您不应尝试使模型符合RESTful架构,除非它使交互更容易和直观。

最好将这些自定义操作放入自己的控制器,而不是UsersController。一旦你觉得你的控制器太拥挤了,将一些动作转移到他们自己的独立模块或控制器中可能是个好主意。

class RegistrationController
  def activate # perform the activation
    ..
  end

  def activation # show the activation page
    ...
  end
end

class PasswordController
  def send # send the email
  end

  def resetter # show the page to reset the password
  end

  def reset # actually reset the password
  end
end

可以通过自定义路由而不是资源访问这些控制器操作。

match 'register/activation' => 'registration#activation'
post 'register/activate' => 'registration#activate'

post 'password/send' => 'password#send'
match 'password/resetter' => 'password#resetter'
post 'password/reset' => 'password#reset'