我是Ruby on Rails中的noob,我有一个愚蠢的问题: 在我的session_controller中我有
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_path, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
我所拥有的路线 匹配'/ signin',到:'sessions#new'
在new.html.haml我有
= simple_form_for :session do |f|
= f.input :email
= f.input :password
= f.button :submit, 'Sign in!'
当我按下“登录”按钮时,我希望调用“创建”方法(它在我的用户模型中如何工作),但调试显示“新”方法,我有“authenticity_token”,没有填写电子邮件和密码。 有人能解释一下heppens是什么? 我不明白方法“新”调用何时调用其他方法。
答案 0 :(得分:4)
此行为与simple_form
无关。您没有为要调用的操作指定URL,也没有传递任何模型来推断其路径,因此您最终将使用空哈希调用的url_for()
方法。此调用的结果是当前页面,显然与显示表单的路径相同,但使用POST
作为HTML-verb。
要拨打sessions_path
而不是new_session_path
,您可以执行以下操作:
= simple_form_for :session, url: :sessions do |f|
通过url_for
进行处理,它实际上与指定url: sessions_path
相同,但却让魔术师不在你身边。
答案 1 :(得分:1)
我不使用haml我使用erb,但我怀疑工作相似。在erb中,您的表单需要调用一个操作,例如:
form_for :session, :url => {:action => "create"} do |f|
这会调用会话控制器的create方法。所以我猜haml会是
simple_form_for :session, :url => {:action => "create"} do |f|
希望这会有所帮助