【发布时间】:2013-05-24 18:49:57
【问题描述】:
我得到一个:
NoMethodError in UsersController#show
undefined method `recreate_versions!' for "img1.jpg":String
当我打电话时:
User.all.each do |user|
user.photo.recreate_versions!
end
在我安装的上传器中。我的表列名为 photo,数据类型为 String,在我的 User 模型中由 attr_accessible 调用。任何想法如何解决这个问题?
这是我的完整代码:
class PhotoUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
include Sprockets::Rails::Helper
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def default_url
"fallback/" + [version_name, "img1.jpg"].compact.join('_')
end
version :mini_thumb do
process :resize_to_limit => [50, 40]
end
version :thumb do
process :resize_to_limit => [100, 100]
end
version :default do
process :resize_to_limit => [250, 250]
end
User.all.each do |user|
user.photo.recreate_versions!
end
end
也许我不应该从挂载的上传器调用 recreate_versions?
编辑:
跑步
User.first.photo.class
在控制台输出中:
User Load (10.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
User Load (10.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> PhotoUploader
然后遍历每个用户并调用 recreate_versions!:
2.0.0p0 :003 > User.all.each do |user|
2.0.0p0 :004 > user.photo.recreate_versions!
2.0.0p0 :005?> end
User Load (1.1ms) SELECT "users".* FROM "users"
User Load (1.1ms) SELECT "users".* FROM "users"
NoMethodError: undefined method `read' for nil:NilClass
在 Rails 控制台中检查 nil 后,这有效(但仍然不确定将其放在哪里):
User.all.each do |user|
user.photo.recreate_versions! if user.photo.present?
end
【问题讨论】:
-
可能想更新到 Rails 4 RC1。
-
我很快就会,但这会对这个特定问题产生影响吗?
-
不,这不会影响您当前的问题。我会发布一个答案。
标签: ruby-on-rails imagemagick carrierwave