在我的网络应用程序中,我通过电子邮件进行了典型的用户激活过程。
目前我对激活过程中的每一步都有一个自定义控制器操作,即我有一个“激活”操作,或多或少简单地呈现“注册”页面,然后我有另一个动作“激活“这是实际表格在登记页面上的目标行动。
我想知道这是最佳做法吗? - 现在,我即将实施管理员启动的密码重置(管理员点击一个链接以便在特定用户上重置密码,用户会收到一封电子邮件,其中包含指向他可以设置新密码的页面的链接) 。我会更进一步,再增加3个控制器动作(一个用于发送重置电子邮件,一个用于访问重置页面的用户,另一个用于实际重置表单的操作)。
这似乎让我的控制器变得非常混乱,我想知道这是否是“正确”的方式呢?
thx任何建议
答案 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'