【发布时间】:2014-06-17 16:54:21
【问题描述】:
Rails 教程。我无法获取登录表单来调用 create 方法。调试显示它只调用新操作。我在设置也有数据库的用户时没有问题,因此使用了以下内容:
<%= form_for @user do |f| %>
在这种情况下,没有模型,我按照教程的建议进行操作:
<%= form_for(:session, url: sessions_path) do |f| %>
快速浏览 rake 路线表明该路线是有效的:
Prefix Verb URI Pattern Controller#Action
root GET / site_pages#root
about GET /about(.:format) site_pages#about
signup GET /signup(.:format) users#new
signout DELETE /signout(.:format) sessions#destroy
signin GET /signin(.:format) sessions#new
users POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user GET /users/:id(.:format) users#show
DELETE /users/:id(.:format) users#destroy
sessions POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
session DELETE /sessions/:id(.:format) sessions#destroy
不知道我错过了什么。折腾了一个多小时。尝试更改为 form_tag 并且它仍然以相同的方式做出反应。我已经以多种方式编辑了路线和表格,以触发正确的功能,但没有运气。
我错过了什么?谢谢。
添加了控制器:
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
#SIGN IN AND REDIRECT
else
flash.now[:danger] = "Invalid Submission. Please Try Again."
render 'new'
end
end
【问题讨论】:
-
将其视为 Rails 未解之谜。我将: 更改为: 并且成功了。然后我把它改回来,它仍然有效。我不知道。
-
您始终可以明确发布方法::发布到您的
form_for以不调用 get 方法:form_for(:session, url: sessions_path, method: :post) -
为什么不使用 Devise gem?
-
迈克尔很快就到了。
标签: ruby-on-rails forms routes railstutorial.org