直到现在我想,我必须只允许我需要保存在数据库中的那些属性。但最近我使用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)
然后成功裁剪图像。
所以问题是为什么我需要允许这些虚拟属性,即使这些属性没有保存在数据库中?
答案 0 :(得分:0)
来自Rails guide:
使用强参数时,禁止使用Action Controller参数 用于活动模型批量分配,直到它们为止 列入白名单。
因此,这里的正常属性和虚拟属性之间没有区别,它只是允许参数进行质量分配。您的模型对这些参数的作用取决于您。