Rails创建简易登录页面遭遇NoMethodError错误求助
问题解决:Rails登录表单提交时的NoMethodError
错误原因
你的代码中params[:session]为nil,调用[]方法时触发了undefined method '[]' for nil:NilClass错误。根源是表单没有将输入字段封装到:session命名空间下,提交的参数是顶级的:email和:password,而非嵌套在:session哈希里。
解决方案(二选一即可)
方案1:修改表单,指定命名空间
在form_with中添加scope: :session,让表单字段自动嵌套到:session哈希中:
<%= form_with scope: :session, url: login_path, local: true do |form| %> <%= form.label :email %> <%= form.email_field :email %> <%= form.label :password %> <%= form.password_field :password %> <%= form.submit "LogIn"%> <% end %>
方案2:修改控制器,直接获取顶级参数
如果不想修改表单,可调整控制器中参数的获取方式,直接读取顶级的:email和:password:
def create user = User.find_by(email: params[:email].downcase) if user && user.authenticate(params[:password]) log_in user redirect_to user else flash.now[:danger]='Invalid login id' render 'new' end end
验证建议
可以在create方法开头添加puts params.inspect,查看服务器日志就能直观看到提交的参数结构,帮助理解参数传递逻辑:
def create puts params.inspect # 查看参数结构 # 剩余代码... end
内容的提问来源于stack exchange,提问作者s-chuck
相关产品推荐
相关产品推荐

