如何根据Rails3中的条件转发/路由请求



这是我在这里的第一个问题,我目前正在尝试构建我的第一个RubyonRails应用程序,所以这个问题可能是基本的。

问题:

我想要一个根网站上的表单,它只包含两个字段,一个用户模型的电子邮件和密码。根据键入的电子邮件地址是否已经存在,表单应将请求转发给"users#create"(即创建新用户)或"sessions#create"(即登录用户…如果密码正确)

我尝试过的:

为了解决这个问题,我在页面控制器中创建了一个名为"decision"的新操作,并将表单指向该页面。

基本上看起来是这样的:

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方式"。

我重复了大量的代码,我觉得我在一个控制器里放了一些不是为了这个目的而做的东西。

另一个问题是,我无法让我的rspec集成测试工作,它基本上进入root_path,用一个新用户填写表单,点击按钮并期待一个成功的flash。。。但按下按钮后,测试返回一个空的html文档。尽管当我在浏览器中做同样的事情时,它运行得非常好。

所以我想:

你不能以某种方式将上面的if语句放在routes.rb文件中,并将请求重定向到相应的控制器和操作吗?

如果是,怎么办?

或者有人对如何做到这一点有不同的想法吗?

谢谢你,

-康斯坦丁

实际上,这是处理问题的一种相当可靠的方法。

Rails中的路由只是一种将URL映射到代码的简单方法。这样的逻辑正好属于你放置它的地方:在控制器中。

回答我自己的问题:

事实证明,规范问题只是由于webrat没有遵循rails 3中的重定向。这实际上是一个常见的问题,在这里已经解决了->例如。

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

最新更新