has_one Profile モデルを持つ標準の User モデルを使用して、単純なアプリを構築しています。プロファイル テーブルに画像属性の列が必要です。したがって、RailsCast #253 というタイトルの CarrierWave File Uploads に従いました。アップロードされた画像のサイズを変更しようとするまで、すべてうまくいっています。これには ImageMagick と RMagick のインストールが必要で、検索に 1 日かかりました。しかし、最終的には正しく、rmagick バージョン 2.13.2 のインストールに成功したと思います ("gem list" を実行して確認)。
しかし、それほど速くはありません...フォームをレンダリングして新しいプロファイルを作成しようとすると、次のエラーが発生します。
Profiles の NoMethodError#NilClass:Class の新しい未定義メソッド `model_name'
参考までに、ImageUploader の「include CarrierWave::RMagick」のコメントを外すまで、このフォームは正常に機能していました (画像のサイズ変更に RMagick メソッドを使用する場合は、これを行うことを想定しています)。
これを修正する方法について何か考えはありますか?
バージョン情報 (RailsInstaller for Windows を使用して起動および実行しました)
Rails 3.2.13
Ruby 1.9.3p392 [i386-minw32]
ImageMagick 6.8.5-Q16
rmagick 2.13.2
Gemfile
gem 'rmagick'
gem 'carrierwave'
モデル
class User < ActiveRecord::Base
has_one :profile
class Profile < ActiveRecord::Base
attr_accessbile :image
belongs_to :user
mount_uploader :image, ImageUploader
画像アップローダ
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
プロフィールコントローラー
def new
@profile = current_user.build_profile
end
ビュー/プロファイル/new.html.erb
<%= form_for @profile, :html => {:multipart => true} do |f| %>
<%= f.file_field :image %>
<%= f.submit "Create my profile" %>
<% end %>