在我的web应用程序中,我有一个典型的电子邮件用户激活过程。
目前,我对激活过程中的每一步都有一个自定义的控制器操作,即我有一个或多或少简单地呈现"注册"页面的操作"激活",然后我有另一个"激活"操作,它是注册页面上实际表单的目标操作。
我想知道这是不是最好的做法?-现在,我即将实现管理员启动的密码重置(管理员单击特定用户的密码重置链接,用户会收到一封电子邮件,其中包含一个可以设置新密码的页面链接)。我会更进一步,再添加3个控制器操作(一个用于发送重置电子邮件,一个用于访问重置页面的用户,以及一个用于实际重置表单的操作)。
这似乎让我的控制器有点乱,我想知道这是否是"正确"的方法?
任何建议的thx
您所做的一切都很好-不需要使控制器操作符合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'