假设我有一个使用Item
Mongoid
class Item
include Mongoid::Document
field :title, type: String
...
...
end
我希望在将数据传递给Controller之前在Model中向Item
添加一些动态字段 - 因为Item
正由多个控制器使用。
例如,我想通过添加thumb
+ /path/to
添加我将生成的filename
字段。
我尝试了attr_accessor
的一些解决方案:
class Item
include Mongoid::Document
field :title, type: String
...
...
attr_accessor :thumb
def prepare_data
@thumb = "/path/to/thumb"
end
end
......稍后在一些控制器中:
@items_all = Item.all
@thumbs = []
@items_all.each do |i]
i.prepare_data
@thumbs.push(i[:thumb])
end
# @thumbs >>> (empty)
所以我似乎在这里遗漏了一些因为它不起作用。
我也可以避免每次手动调用prepare_data
吗?可以在after_initialize
的帮助下? (这对我也没用)。
答案 0 :(得分:0)
我发现了自己的错误。首先我忘记添加after_initialize :do_something
然后我发现我可以使用@ attributes.merge!
after_initialize :do_after_initialize
def do_after_initialize
@attributes.merge!({
:title => self.get_title,
:type => self.get_type,
:thumb => ImageUploader::thumb(self[:pictures][0]["filename"])
:price_f => ActionController::Base.helpers.number_to_currency(self[:price], {:precision=>0})
})
end