gpt4 book ai didi

ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:43 27 4
gpt4 key购买 nike

首先,我使用的是 rails 3.1.3 和来自 master 的 carrierwavegithub 仓库的分支。

我使用 after_init 钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:

class Page < ActiveRecord::Base 
serialize :fields, Hash

after_initialize :set_accessors

def set_accessors
case self.template
when 'standard'
class << self
define_method 'image' do
self.fields['image']
end
define_method 'image=' do |value|
self.fields['image'] = value
end
end
mount_uploader :image, PageImageUploader
end
end
end
end

省略 mount_uploader 命令让我可以访问我想要的属性。但是当我安装 uploader 时出现错误消息说“nil 类的未定义新方法”

我在源代码中读到有方法 read_uploader 和扩展模块中的 write_uploader。我如何必须覆盖这些来制作 mount_uploader 命令使用我的“虚拟”属性。

我希望有人知道我如何解决这个问题。多谢您的帮助。

最好的问候。多米尼克。

最佳答案

同样的问题,但在您的模型中已解决,您应该覆盖 read_uploader(column)write_uploader(column, identifier) 实例方法。对于虚拟列,我还遇到了 #{column}_will_change!#{column}_changed? 的问题,所以我也必须定义它们:

class A < ActiveRecord::Base
serialize :meta, Hash

mount_uploader :image, ImageUploader

def image_will_change!
meta_will_change!
@image_changed = true
end

def image_changed?
@image_changed
end

def write_uploader(column, identifier)
self.meta[column.to_s] = identifier
end

def read_uploader(column)
self.meta[column.to_s]
end
end

关于ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com