Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何根据Rails 3中的条件转发/路由请求?_Ruby On Rails_Ruby_Ruby On Rails 3_Routing_Routes - Fatal编程技术网

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

Ruby on rails 如何根据Rails 3中的条件转发/路由请求?,ruby-on-rails,ruby,ruby-on-rails-3,routing,routes,Ruby On Rails,Ruby,Ruby On Rails 3,Routing,Routes,这是我在这里的第一个问题,我目前正在尝试构建我的第一个RubyonRails应用程序,所以这个问题可能有点基本 问题是: 我想在根网站上的形式,其中只有两个字段,电子邮件和用户模型的密码组成。根据键入的电子邮件地址是否已存在,表单应将请求转发给“用户#创建”(即创建新用户)或“会话#创建”(即,如果密码正确,请登录用户) 我尝试的是: 为了解决这个问题,我在pages控制器中创建了一个名为“Decise”的新操作,并将表单指向该页面 基本上是这样的: def decide if User.f

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

问题是:

我想在根网站上的形式,其中只有两个字段,电子邮件和用户模型的密码组成。根据键入的电子邮件地址是否已存在,表单应将请求转发给“用户#创建”(即创建新用户)或“会话#创建”(即,如果密码正确,请登录用户)

我尝试的是:

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

基本上是这样的:

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
--

现在,这是可行的,我为自己作为一个完全的初学者而感到自豪,但我可以听到有经验的程序员对这段代码痛哭流涕。我很确定这不是“铁路之路”

我重复了大量的代码,我觉得我把一些东西放进了一个控制器,而这个控制器并不是专门为这个目的设计的

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

所以我想:

您能否将上面的if语句放入routes.rb文件中,并将请求重定向到相应的控制器和操作

如果是,怎么做

还是有人对如何实现这一点有不同的想法

谢谢,


-康斯坦丁

事实上,这是一种相当可靠的解决问题的方法


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

回答我自己的问题:

原来规范问题只是由于webrat没有遵循Rails3中的重定向。例如,这实际上是一个已经解决的常见问题


因此,至少这个问题已经解决了。

就你的RSpec问题而言,可能值得再问一个更详细的问题,例如:你的规格、更多的代码等。+1@KonstantinK作为旁白,没有必要编写你自己的aurhentication内容,除非你需要一些具体的东西,请检查,谢谢你的回答。所以页面控制器确实是正确的位置。。。但是有没有一种方法不需要粘贴在其他创建代码中?我尝试通过重定向转发到params.merge!:controller=>:sessions,:action=>:create,但问题是,由于密码被过滤,它们不会作为参数传递。我想我需要转发整个请求,而不是重定向它