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

Posted

技术标签:

【中文标题】我们还需要允许 ruby​​ 虚拟属性吗?【英文标题】:Do we need to permit ruby virtual attributes also? 【发布时间】:2014-02-26 07:41:19 【问题描述】:

直到现在我都认为,我必须只允许那些我需要保存在数据库中的属性。但是最近我用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】:

来自Rails guide:

强参数,禁止Action Controller参数 在活动模型质量分配中使用,直到它们被 列入白名单。

所以这里没有区分普通属性和虚拟属性,只是允许参数进行质量分配。您的模型如何处理这些参数取决于您。

【讨论】:

以上是关于我们还需要允许 ruby​​ 虚拟属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

ruby 虚拟属性案例示例

编程语言 Ruby 如何还能再活 25 年?

在 Kubernetes 中,我们还需要多进程/gunicorn 吗?

即使在终止应用程序后,我们还能获取位置信息吗? [关闭]

从各大跨平台技术说起,我们真的需要虚拟 DOM 吗?

ESXI6.0虚拟机磁盘数据文件丢失还能恢复吗