【问题标题】:redirecting from another page taking info从另一个获取信息的页面重定向
【发布时间】:2014-02-20 13:20:39
【问题描述】:

所以在用户注册后,我将他们重定向到我的附加信息页面,在那里我收集了更多信息。但是,我的设计/实现有问题,因为 rails 说我缺少用户/创建模板

这是我的用户控制器

 class UsersController < ApplicationController

    def show
      @user = User.find(params[:id])
    end

    def new
      @user = User.new
    end


    def additional_info
      @user = User.new(user_addinfo)
      if @user.save
       redirect_to show_path
      end
    end


    def create
     @user = User.new(user_params)
     if @user.save
     # UserMailer.welcome_email(@user).deliver
      sign_in @user
      redirect_to  additional_info_path
      flash[:success] = "Welcome to InYourShoes!"
      #return @user  
     else
       render'new'
     end
  end  

    private

      def user_params 
        params.require(:user).permit(:name, :email, :password, :password_confirmation)
      end


      def user_addinfo
        params.permit(:year)
      end
  end

def show 是我在重定向到additional_info 页面后要显示的用户个人资料页面

def additional_info 只是从私有方法 def user_addinfo 中获取附加信息

def create 是注册过程。

输入基本用户信息后,它会被重定向到附加信息,这很好。但在附加之后,它说我错过了用户/创建模板,但我的代码我试图重定向到 show_path#usersshow,仍然不起作用

有什么建议吗?抱歉,如果这看起来很直观,但我是 Rails 新手。

【问题讨论】:

  • 你在做什么不是很清楚,但我认为问题出在你的附加信息方法中,因为你正在使用 user_addinfo 中的参数创建一个全新的用户,而没有创建会话...您使用什么来管理会话以进行用户身份验证?
  • 我有一个会话控制器来处理这个问题,我认为 sign_in itsef 是一个会话?

标签: ruby-on-rails


【解决方案1】:

正如我在评论中所说,我认为您的问题出在 additional_info 方法中。你正在做的是:

  • 创建用户
  • 为用户创建会话 (sign_in @user) - 将 user_id 存储在会话中的某处
  • 重定向到您的附加信息页面 问题来了。由于用户已经登录,因此您无需使用其他参数创建新用户。您应该有一些帮助程序来检索当前登录的用户(如 current_user),并在附加信息方法中,只需更新它。

所以你的 additional_info 方法会变成这样:

def additional_info
  user = User.find session[:user_id]
  user.update params[:user]
  redirect_to user_path #show action
end

【讨论】:

  • 我应该在哪里定义助手?这是我应该在我的会话控制器中定义的方法吗?
  • 对不起,我写错了,我要编辑我的答案。不需要帮手
  • 得到这个错误 ActiveRecord::RecordNotFound in UsersController#additional_info 找不到没有 ID 的用户来自这一行:user = User.find session[:user_id]
  • 这意味着您没有将 user_id 存储在会话中。在您的 create 方法中,或者更好的是在您的 sign_in 方法中,您可以使用您正在使用的任何变量执行类似 session[:user_id] = @user.id 的操作
  • 很抱歉,我是新来的 Rails,我查看了我的文件,发现我的 sign_in 方法在模块 sessionHelper 中,而不是存储 id ......它使用 remember_tokens。 ...如果有帮助,我会按照 michael hartl 的 rails 教程进行操作
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多