也许这不是一个答案,但太长了,不能发表评论。
首先,我不确定是否@pokemon.user_id
可以设置为用户实例,我会尝试:
@pokemon.user = current_user
或者:
@pokemon.user_id = current_user.id
其次,我不会 user @current_user
,而是current_user
如上所述。
第三,不清楚你在哪里设置session[:user_id]
,为了调试你的问题,我会在口袋妖怪控制器的创建动作中打印所有相关变量:
def create
@pokemon = Pokemon.new(params[:pokemon])
@pokemon.user_id = current_user
p current_user
p session[:user_id]
安全操作
您可以使用以下方式限定您的资源current_user
:
@pokemon = current_user.pokemons.find(params[:id])
这样,您将只找到该用户的口袋妖怪。我不确定此方法是否引发异常或仅nil
在用户尚未创建 pokemon 时返回params[:id]
。您必须处理这两个中的任何一个(异常或 nil)才能将其他用户重定向到另一个页面:
例外
begin
@pokemon = current_user.pokemons.find(params[:id])
rescue ActiveRecord::RecordNotFound => e
redirect_to :back
end
为零
@pokemon = current_user.pokemons.find(params[:id])
unless @pokemon
redirect_to :back
end