Rails 中与巫术 Gem 的关联错误

Association Error with Sorcery Gem in Rails

我在 Rails 中使用 Sorcery 设置身份验证,我正在尝试创建一个模型,其中用户的用户 ID 链接为输入数据模型的参考,但我收到错误:

Couldn't find User without an ID

指的是以下代码:

def create
  @user = User.find(params[:user_id])
  @certificate = @user.certificates.create(certificate_params)
  redirect_to certificate_path(@certificate)
end

为了回答我问过自己的基本问题,用户已登录...

如果以上确实是您的代码,那实际上是一个非常奇怪的错误。你应该得到类似 Couldn't find Bar with 'id'= 的东西。上面的错误通常仅在您根本不向 find 提供任何参数时才会出现,即。 User.find()

无论如何,这里的根本问题是 params[:user_id] 不包含您期望的值,并且可能根本不包含任何值。您没有显示足够多的其他代码来确定为什么会这样,但是没关系...

除非您希望人们能够更改 URL 并为系统中的其他用户添加证书,否则您不应依赖 params[:user_id] 来创建关联对象,您应该使用 current_user - 这就是身份验证的全部要点。

所以:

def create
  @certificate = current_user.certificates.create(certificate_params)
  redirect_to certificate_path(@certificate)
end