我们还需要允许ruby虚拟属性吗?

时间:2014-02-26 07:41:20

标签: ruby-on-rails ruby-on-rails-4 jcrop strong-parameters

直到现在我想,我必须只允许我需要保存在数据库中的那些属性。但最近我使用Jcrop裁剪我的用户头像,它有4个虚拟属性,将在前端裁剪后发送,

这是我的模特

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
  attr_accessor :crop_x, :crop_y, :crop_w, :crop_h

  after_update :crop_avatar

  def crop_avatar
    avatar.recreate_versions! if crop_x.present?
  end
end

当我在裁剪后提交时,我的控制台日志会显示

unpermitted params: crop_x, crop_y, crop_h, crop_w

并且图像未被裁剪。

但是如果我允许这些虚拟属性为

params.require(:user).permit(:avatar,:crop_x,:crop_y,:crop_h,:crop_w)

然后成功裁剪图像。

所以问题是为什么我需要允许这些虚拟属性,即使这些属性没有保存在数据库中?

1 个答案:

答案 0 :(得分:0)

来自Rails guide

  

使用强参数时,禁止使用Action Controller参数   用于活动模型批量分配,直到它们为止   列入白名单。

因此,这里的正常属性和虚拟属性之间没有区别,它只是允许参数进行质量分配。您的模型对这些参数的作用取决于您。