【发布时间】:2012-08-23 19:01:49
【问题描述】:
我对 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,但是当我这样做时,错误的 flash 消息不会呈现在页面(虽然它没有那条路线)。我尝试在没有 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