Ruby on rails Rails将_重定向到创建错误的URL

Ruby on rails Rails将_重定向到创建错误的URL,ruby-on-rails,ruby-on-rails-4,redirect,controller,Ruby On Rails,Ruby On Rails 4,Redirect,Controller,无法找到任何与此问题相关的内容(其他搜索涉及表单等)。这可能是我的疏忽。但我到底错过了什么 目标:如果存在会话,我只是尝试从/login页面URL重定向到/dashboardURL 预期结果:调用重定向到仪表板\u索引\u url或重定向到“/dashboard”应转到https://mydomain/dashboard 当前结果:如果我转到https://mydomain创建会话后,它会将我重定向到https://mydomaindashboard,请注意缺少的斜杠 尝试的解决方案: 创建会

无法找到任何与此问题相关的内容(其他搜索涉及表单等)。这可能是我的疏忽。但我到底错过了什么

目标:如果存在会话,我只是尝试从
/login
页面URL重定向到
/dashboard
URL

预期结果:调用
重定向到仪表板\u索引\u url
重定向到“/dashboard”
应转到
https://mydomain/dashboard

当前结果:如果我转到
https://mydomain
创建会话后,它会将我重定向到
https://mydomaindashboard
,请注意缺少的斜杠

尝试的解决方案:

  • 创建会话后手动键入URL,RESULT:有效,因此似乎存在正确的路由
  • 路由中进行手动路由。rb
    结果:行为与
    资源
    路由完全相同,但缺少斜杠
  • 清除浏览器缓存,使用不同的浏览器结果:所有浏览器都显示相同的行为
以下是我所拥有的(缩写为相关部分):

class LoginController“dashboard#索引”

@Ryan以下是路线的当前输出:

$rake路由
前缀动词URI模式控制器#操作
登录\索引获取/登录(:格式)登录\索引
发布/登录(:格式)登录#创建
新建登录获取/登录/新建(:格式)登录新建
编辑\登录获取/登录/:id/编辑(:格式)登录\编辑
login GET/login/:id(:format)login#show
补丁/登录/:id(:格式)登录#更新
PUT/login/:id(:格式)登录#更新
删除/登录/:id(:格式)登录#销毁
仪表板获取/仪表板(:格式)仪表板#索引
仪表板#索引获取/仪表板(:格式)仪表板#索引
发布/仪表板(:格式)仪表板#创建
新建仪表板获取/仪表板/新建(:格式)仪表板#新建
编辑仪表板获取/仪表板/:id/编辑(:格式)仪表板#编辑
GET/dashboard/:id(:format)dashboard#show
补丁/仪表板/:id(:格式)仪表板#更新
PUT/dashboard/:id(:格式)dashboard#update
DELETE/dashboard/:id(:format)dashboard#destroy

root GET/login#index

要使用dashboard(仪表板)index(url),必须将其写入路由文件中。但是,当您在routes.rb a仪表板资源中创建时,您可以使用仪表板url,它将指向/dashboards/index

完成此任务的另一种方法是创建映射

get 'dashboard' => "dashboard#index" as: :dashboard_index
仪表板索引url和仪表板索引路径将为您提供

更新1

请看这个 问题是路径为您提供了相对路由和绝对url。这就是为什么在路径中没有额外的斜杠。尝试path而不是url,它应该可以工作

更新2


尝试仪表板索引路径

已解决:

嗯,我发现了问题,实际上不是Rails,而是Apache乘客。在apache级别有一个带有重定向(以便所有HTTP都重定向到HTTPS)的配置,该配置没有浮动尾随斜杠并导致麻烦。(拍了拍额头)


我一定喜欢那些红鲱鱼。非常感谢大家的快速帮助

把你的路线改成

get'/login',to:redirect('/dashboard')

您甚至可以通过以下方式将生成的链接定制为更特定于您的用户的内容:

get'/login',to:redirect('/dashboard'),as:'/dashboard/user[:username]'
如果需要的话

另一方面,你应该试着边走边清理你的路线。有很多是你没有使用的。换成
resources:dashboard,仅限:[:index]
并根据需要添加到其中。例如
only:[:index,:show]
等。如果有一天需要其他开发人员修改您的应用程序,我们会查看您的路线,可能会对我们可以做什么做出错误的假设


Justin

您可以添加
rake routes
的输出吗。在您的
routes.rb
中,您有根集吗?示例:
root:to=>“home#index”
@musicman3569您是否尝试使用url上的路径?@TetianaChupryna
url上的路径
是什么意思?我是rails新手。@musicman3569出于某种原因查看我的更新答案,即使我这样做或直接使用
重定向到“/dashboard/index”
,而不是变量,它仍然会去掉前导空格,因此我得到
https://mydomaindashboard/index
,非常好的建议,感谢您的快速回复。不幸的是,使用
redirect\u to dashboard\u index\u路径
会转到
https://mydomaindashboard
也不带斜杠。然而,手动添加斜杠并重新加载会给我提供正确的页面。我真的被难住了。问题出在Apache上,我在下面发布了解决方案。再次感谢!
get 'dashboard' => "dashboard#index" as: :dashboard_index