在RailsCast#274中的Rails 4 StrongAttributes

时间:2013-12-21 16:35:48

标签: ruby-on-rails ruby ruby-on-rails-4 railscasts

我是Rails的新手。特别是在处理Rails 3和4之间的变幻莫测时,我一直在学习RailsCast和MHartl的教程。

我通过使用以下链接问题中的答案成功获得RailsCast#274中的代码: ActiveModel::ForbiddenAttributesError in PasswordResetsController#update

我担心的是,此修复程序将使我在将来容易受到问题的影响,无论是安全还是其他问题。如果有“正确”的方式来做到这一点,我想知道。这是我的代码块:

class PasswordResetsController < ApplicationController
  def create
    user = User.find_by_email(params[:email])
    user.send_password_reset if user
    redirect_to root_url, :notice => "Email sent with password reset instructions."
  end

  def edit
    @user = User.find_by_password_reset_token!(params[:id])
  end

  def update
    @user = User.find_by_password_reset_token!(params[:id])
    if @user.password_reset_sent_at < 2.hours.ago
      redirect_to new_password_reset_path, :alert => "Password reset has expired."
    elsif @user.update_attributes(params.require(:user).permit(:password, :password_confirmation))
      redirect_to root_url, :notice => "Password has been reset."
    else
      render :edit
    end
  end
end

1 个答案:

答案 0 :(得分:0)

你需要先设置你的参数。在你的类中定义一个私有方法

private
def model_params
  params.require(:model).permit(:list :all :your :attributes)
end

然后当您进行更新时,请使用以下内容:

@model.update(model_params)

质量分配在rails中很酷,但你需要确保你受到保护

希望有所帮助