通过操作方法更新记录

时间:2014-02-20 16:10:23

标签: ruby-on-rails ruby

用户注册,被重定向到要收集信息的页面,非常直接

我生命中无法弄清楚如何做到这一点

我的用户控制器

    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)行。

非常感谢很多帮助。我一直在尝试许多不同的东西,似乎无法弄明白

3 个答案:

答案 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.rbadditional_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中,并且可以在视图中访问