繁体   English   中英

如何根据 Rails 3 中的条件转发/路由请求?

[英]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 中。

回答我自己的问题:

原来,规范问题仅仅是由于 webrat 没有遵循 rails 3 中的重定向。这实际上是一个已解决的常见问题->here例如。

所以至少这个问题已经解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM