rails 3 路由保留帖子的自定义 url

问题描述 投票:0回答:1

我对 Rails 相当陌生,并且希望在出现错误并且呈现“新”模板时使用户登录的 url 保持不变

这是我的路线

resources :users, only: [:new, :create]
resources :sessions, only: [:new, :create, :destroy]

root to: 'pages#home'

match '/signin', to: 'sessions#new'
#match '/signin', to: 'sessions#create', via: :post, as: :post_session
match '/logout', to: 'sessions#destroy'

这是会话控制器代码

def new
end

def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
        sign_in user
        redirect_to root_url
    else
        flash.now[:error] = 'Invalid email or password'
        render 'new'
    end
end

如您所见,我注释掉了一个自定义路由来捕获帖子,以便渲染“新”调用保留 /signin url,但是当我这样做时,错误的闪现消息不会在页面中呈现(但它没有这条路线)。我尝试在不使用 now 方法的情况下使用 flash,但仍然没有看到我的消息显示。有什么想法吗?

编辑:

我尝试了下面的建议,但仍然发现问题。查看访问日志后,应用程序路由到第一个登录路由,因为它是使用 match 而不是 get 定义的。 我更新后的工作路线文件现在看起来像这样

resources :users, only: [:new, :create]
#resources :sessions, only: [:new, :create, :destroy]

root to: 'pages#home'

match '/signin', to: 'sessions#new', via: :get
match '/signin', to: 'sessions#create', via: :post, as: :post_session
match '/logout', to: 'sessions#destroy', via: :delete
ruby-on-rails ruby-on-rails-3 rails-routing rails-flash
1个回答
0
投票

把现在的东西拿出来,那是不需要的。您的路线可能有冲突。根据您设置匹配线的方式,您可能可以完全删除

resources :sessions
,然后取消注释匹配线。这应该能满足您的需要。

根据您的评论,当您删除资源调用时,它可能不知道此时要渲染什么。尝试更改为:

render "sessions/new"
© www.soinside.com 2019 - 2024. All rights reserved.