1

假设我有一个Item使用的模型Mongoid

class Item

  include Mongoid::Document

  field :title, type: String
  ...
  ...

end

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?(这对我也不起作用)。

4

1 回答 1

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
于 2013-06-12T12:31:13.047 回答