Ruby on rails 如何根据Rails 3中的条件转发/路由请求?
这是我在这里的第一个问题,我目前正在尝试构建我的第一个RubyonRails应用程序,所以这个问题可能有点基本 问题是: 我想在根网站上的形式,其中只有两个字段,电子邮件和用户模型的密码组成。根据键入的电子邮件地址是否已存在,表单应将请求转发给“用户#创建”(即创建新用户)或“会话#创建”(即,如果密码正确,请登录用户) 我尝试的是: 为了解决这个问题,我在pages控制器中创建了一个名为“Decise”的新操作,并将表单指向该页面 基本上是这样的: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
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,但问题是,由于密码被过滤,它们不会作为参数传递。我想我需要转发整个请求,而不是重定向它