用户注册,被重定向到要收集信息的页面,非常直接
我生命中无法弄清楚如何做到这一点
我的用户控制器
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def additional_info
#user = User.find session[:user_id]
@user = User.update(user_addinfo)
redirect_to user_path
end
def create
@user = User.new(user_params)
if @user.save
#session[:user_id] = @user.id
#UserMailer.welcome_email(@user).deliver
sign_in @user
redirect_to additional_info_path
flash[:success] = "Welcome to InYourShoes!"
else
render'new'
end
end
私有
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def user_addinfo
params.require(:user).permit(:year)
end
end
user_addinfo
是我想要调用更新我的additional_info方法记录的操作方法
def create
方法已注释到我不确定是否有必要,尤其是session[:user_id] = @user.id
。我被告知我需要这个来跟踪我的会话,但也许有人可以为我揭穿这个,就像我跟随michael hartl的教程一样。
目前使用此代码,rails正在给我一个缺少的参数
params.require(:user).permit(:year)
行。
非常感谢很多帮助。我一直在尝试许多不同的东西,似乎无法弄明白
答案 0 :(得分:1)
更改您的控制器代码如下:
def additional_info
@user = User.find params[:id] ## Set @user
end
def update
if @user.update(user_addinfo)
redirect_to user_path(@user), notice: 'User was successfully updated.'
else
render action: 'additional_info'
end
end
def create
@user = User.new(user_params)
if @user.save
#session[:user_id] = @user.id
#UserMailer.welcome_email(@user).deliver
sign_in @user
redirect_to additional_info_path(@user) ## Pass @user
flash[:success] = "Welcome to InYourShoes!"
else
render'new'
end
end
并在routes.rb
将additional_info
路线更新为
get 'info/:id' => 'users#additional_info', :as => 'additional_info'
答案 1 :(得分:0)
你additional_info
行动似乎有误。您需要传入要为其收集其他信息的用户的ID。
def additional_info
@user = User.find params[:id]
@user.update_attributes(user_addinfo)
redirect_to user_path(@user)
end
答案 2 :(得分:0)
您在create方法中评论的行:
#session[:user_id] = @user.id
是什么将用户ID存储到会话变量而不是url中的param。
然后,您在additional_info方法中注释了这一行
#user = User.find session[:user_id]
这是通过您之前存储在会话变量中的ID来查找用户。
此时,用户对象将存储在用户中 如果您需要在实例变量中使用它,请确保将该行修改为
@user = User.find session[:user_id]
然后,您的用户将存储在@user中,并且可以在视图中访问