基本上,我正在处理一个“新列表”表单,无论用户是否登录,它都需要工作 - 所以如果用户没有登录,它会创建一个用户并让他们登录,然后创建关联的清单。我正在使用带有设计的 rails 4,并且真的只需要知道这种情况下的最佳实践是什么,因为它在 Web 应用程序中似乎很常见。
因此,我在列表表单底部的 fields_for :user 标记内有主要用户字段(电子邮件、传递、传递确认),仅在用户未登录时显示。它在列表表单内,所以字段名称采用列表 [用户] [电子邮件] 等形式。我在“列表”控制器中的创建函数目前如下所示:
def create
#if not logged in, create user & sign them in
if !user_signed_in?
@user = User.new(params[:listing].require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation))
if @user.save
sign_in @user
else
@listing.errors.add :base, "Invalid user data"
end
end
@listing = current_user.listings.build(listing_params)
if @listing.save
redirect_to listing_url(@listing), notice: 'Success! Now, add some images'
else
render "new"
end
end
只要没有任何验证错误,这一切都可以正常工作。我在想我可以在@listing.errors.add 行之后添加渲染“新”,但这似乎不起作用(仍然给出“@listing = current_user.listings.build(listing_params)”行错误用户尚未创建/登录。如果我输入所有用户字段,则用户已成功创建并登录,因此它正确显示了正常的列表验证错误。
无论如何,对于我是否朝着正确的方向前进,我只是有点迷茫——有人可以阐明如何让这个过程“按轨道”工作吗?谢谢你的帮助!