[英]How to forward/route requests based on conditions in Rails 3?
这是我在这里的第一个问题,我目前正在尝试在 Rails 应用程序上构建我的第一个 Ruby,所以这个问题可能有点基本。
问题:
我想要一个根站点上的表单,它只包含两个字段,email 和用户 model 的密码。 根据输入的 email 地址是否已经存在,表单应将请求转发到“users#create”(即创建新用户)或“sessions#create”(即登录用户.. . 如果密码正确)
我尝试了什么:
为了解决这个问题,我在页面 controller 中创建了一个名为“决定”的新操作,并将表单指向该页面。
它基本上看起来像这样:
def decide
if User.find_by_email(params[:email])
# Copied in all of the code from sessions#create
# with a redirect at the end so a /decide page doesn't get rendered
else
# Copied in all of the code from users#create
# with a redirect at the end so a /decide page doesn't get rendered
end
end
--
现在这行得通,我为自己作为一个完整的初学者而感到自豪,但我可以听到有经验的程序员在这段代码中痛苦地哭泣。 我很确定这不是“Rails Way”。
我重复了大量的代码,我觉得我在 controller 中放入了一些不是为此目的而制作的东西。
另一个问题是我无法让我的 rspec 集成测试工作,它基本上进入 root_path,用新用户填写表单,点击按钮并期望成功 flash ......但测试返回一个空html 文档按下按钮。 虽然当我在浏览器中做同样的事情时它工作得很好。
所以我想:
您不能以某种方式将上述 if 语句放在 routes.rb 文件中并将请求重定向到相应的 controller 和操作吗?
如果有怎么办?
或者有没有人有不同的想法如何做到这一点?
谢谢,
-康斯坦丁
实际上,这是处理问题的一种相当可靠的方法。
Rails 中的路由只是一种将 URL 映射到代码的简单方法。 这样的逻辑完全属于您放置它的位置:在 controller 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.