1

我使用 Sorcery 在 Rails 中设置身份验证,我正在尝试创建一个模型,其中用户的用户 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

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

4

1 回答 1

1

如果上面确实是您的代码,那实际上是一个非常奇怪的错误。你应该得到类似的东西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
于 2015-06-19T22:06:26.487 回答