这是我在这里的第一个问题,我目前正在尝试构建我的第一个Ruby on Rails应用程序,所以这个问题可能是基本的。
问题:
我想在根网站上创建一个表单,该表单只包含两个字段,即用户模型的电子邮件和密码。根据输入的电子邮件地址是否已存在,表单应将请求转发给'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 Way”。
我重复了大量的代码,我觉得我在控制器中放了一些不是为了这个目的。
另一个问题是我无法让我的rspec集成测试工作,它基本上转到root_path,用新用户填写表单,点击按钮并期望成功闪存...但测试得到按下按钮返回一个空的html文档。虽然当我在浏览器中做同样的事情时它完全正常。
所以我想:
难道你不能以某种方式将上述if语句放在routes.rb文件中并将请求重定向到相应的控制器和操作?
如果是这样的话?
或者有人有不同的想法如何实现这个目标吗?
谢谢,
-Konstantin
答案 0 :(得分:1)
实际上,这是处理问题的一种相当可靠的方法。
Rails中的路由只是将URL映射到代码的简单方法。像这样的逻辑属于你放置它的地方:在控制器中。
答案 1 :(得分:1)