rails 4使用paperclip设计,未定义方法after_commit

use*_*495 5 ruby-on-rails paperclip devise mongoid

设计激活后我遇到了奇怪的问题.带有paperclip属性的模型has_mongoid_attached_file返回异常:

undefined method `after_commit' for Item:Class

/home/student/.rvm/gems/ruby-2.1.0/bundler/gems/paperclip-c9c5227cb7f8/lib/paperclip/has_attached_file.rb:89:in `add_active_record_callbacks'
/home/student/.rvm/gems/ruby-2.1.0/bundler/gems/paperclip-c9c5227cb7f8/lib/paperclip/has_attached_file.rb:19:in `define'
/home/student/.rvm/gems/ruby-2.1.0/bundler/gems/paperclip-c9c5227cb7f8/lib/paperclip/has_attached_file.rb:4:in `define_on'
/home/student/.rvm/gems/ruby-2.1.0/bundler/gems/paperclip-c9c5227cb7f8/lib/paperclip.rb:179:in `has_attached_file'
mongoid-paperclip (0.0.8) lib/mongoid_paperclip.rb:70:in `has_mongoid_attached_file'
Run Code Online (Sandbox Code Playgroud)

据我了解gems/paperclip-3.5.3/lib/paperclip/has_attached_file.rb中after_commit的可见性问题

def add_active_record_callbacks
      name = @name
      @klass.send(:after_save) { send(name).send(:save) }
      @klass.send(:before_destroy) { send(name).send(:queue_all_for_delete) }
      @klass.send(:after_commit, :on => :destroy) { send(name).send(:flush_deletes) }
end
Run Code Online (Sandbox Code Playgroud)

在Gemfile中,我玩过各种宝石,包括strong_parameters和protected_attributes,但没有取得任何进展.

编辑:我评论行@klass.send(:after_commit,:on =>:destroy){send(name).send(:flush_deletes)}并现在质疑正确实现回形针的回形针

编辑:在https://github.com/thoughtbot/paperclip/pull/1425/files找到更好的解决方案

小智 0

问题是 paperclip 使用 after_commit 钩子进行事务,而 Mongoid 不支持它们。我的建议是您修补 Paperclip 来为事务提供解决方法。

您也可以尝试mongoid-paperclip,我认为这就是您正在寻找的。