You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:03:12