Haven找不到任何特定于此问题的内容(其他搜索涉及表格等)。对我而言,这可能是一个简单的疏忽。但到底是什么我错过了?
目标:如果会话存在,我只是尝试从/login
网址重定向到/dashboard
网址。
预期结果:致电redirect_to dashboard_index_url
或redirect_to '/dashboard'
应转至https://mydomain/dashboard
当前结果:如果我在创建会话后转到https://mydomain
,则会将我重定向到https://mydomaindashboard
,请注意缺少的斜杠
擅自解决方案:
routes.rb
中设置手动路线,结果:行为与缺少斜线的resource
路线完全相同这里有我所拥有的(缩写为相关部分):
class LoginController < ApplicationController
def index
redirect_to dashboard_index_url if session[:user_id]
end
#...
end
class DashboardController < ApplicationController
before_action :require_login # calls redirect_to root_url unless session[:user_id]
def index
#...
end
end
# In routes.rb:
resources :login
resources :dashboard
# have also tried things like (removed the above line for these)
get 'dashboard' => "dashboard#index"
@Ryan这是路线的当前输出:
$ rake routes
Prefix Verb URI Pattern Controller#Action
login_index GET /login(.:format) login#index
POST /login(.:format) login#create
new_login GET /login/new(.:format) login#new
edit_login GET /login/:id/edit(.:format) login#edit
login GET /login/:id(.:format) login#show
PATCH /login/:id(.:format) login#update
PUT /login/:id(.:format) login#update
DELETE /login/:id(.:format) login#destroy
dashboard GET /dashboard(.:format) dashboard#index
dashboard_index GET /dashboard(.:format) dashboard#index
POST /dashboard(.:format) dashboard#create
new_dashboard GET /dashboard/new(.:format) dashboard#new
edit_dashboard GET /dashboard/:id/edit(.:format) dashboard#edit
GET /dashboard/:id(.:format) dashboard#show
PATCH /dashboard/:id(.:format) dashboard#update
PUT /dashboard/:id(.:format) dashboard#update
DELETE /dashboard/:id(.:format) dashboard#destroy
root GET / login#index
答案 0 :(得分:3)
<强>解决:强>
好吧,我发现了问题,实际上并不是Rails,而是Apache-Passenger。有一个带有重定向的配置(以便所有HTTP被重定向到HTTPS)在apache级别没有浮动的斜杠并且导致麻烦。 (打了额头)
喜欢那些红色的鲱鱼。非常感谢你们的快速帮助!
答案 1 :(得分:1)
使用dashboard_index_url,您必须在路线文件中写入它。但是,当您在 routes.rb 信息中心资源中创建时,您可以使用 dashboards_url ,它会导致 / dashboards /索引
确定此任务的其他方法是创建映射
get 'dashboard' => "dashboard#index" as: :dashboard_index
将为您提供和 dashboard_index_url 和 dashboard_index_path
更新1
请查看SO question 问题是路径给你相对路线和网址 - 绝对。这就是为什么你的路径中没有额外的斜杠。尝试路径而不是网址,它应该有用。
更新2
尝试 dashboard_index_path
答案 2 :(得分:0)
如何将路线更改为
get '/login', to: redirect('/dashboard')
您甚至可以通过
将结果链接定制为更适合您用户的内容 如果您需要,请 get '/login', to: redirect('/dashboard'), as: '/dashboard/user[:username]'
。
另一方面,您应该尝试清理路线。那里有很多你没有使用的东西。将其更改为
resources :dashboard, only: [:index]
并根据需要添加。 E.g only: [:index, :show]
等。如果有一天需要另一位开发人员来修改您的应用,我们会查看您的路线,并可能对我们可以做的事情做出错误的假设。
贾斯汀