私の計画は、Devise を使用してユーザーを登録し、登録中に写真 (クリップ) をアップロードする機会をユーザーに与えることです。したがって、ユーザーにはusers_many :users_picturesがあるユーザーとusers_picturesがあります。
次のようにユーザーモデルを変更しました。
after_create :create_users_picture
def create_users_picture
user_id = User.last.user_id
UsersPicture.create!(:user_id => user_id)
end
これは、機能するかどうかを確認するための単なるテストであり、実際に機能します。しかし今、ペーパークリップのアップロードからファイル情報を取得する必要があります。すでに file_field を users_view に挿入しており、データは正しく送信されています。次に、次のようなことを試しました:
def create_users_picture
@users_picture = UsersPicture.new(@user)
@users_picture.save
end
@user には必要なすべてのデータが含まれていると思ったので...しかし、次のようになります。
Parameters: {"user"=>{"user_firstname"=>"merrr", "password_confirmation"=>"[FILTERED]", "photo"=>#<ActionDispatch::Http::UploadedFile:0xe54abbb4 @content_type="image/jpeg", @tempfile=#<File:/tmp/RackMultipart20121023-7937-1tbp5v7-0>, @headers="Content-Disposition: form-data; name=\"user[photo]\"; filename=\"rh.jpeg\"\r\nContent-Type: image/jpeg\r\n", @original_filename="rh.jpeg">, "user_lastname"=>"merrr", "email"=>"merrr@asd.de", "password"=>"[FILTERED]", "user_login"=>"merrr"}, "commit"=>"Sign up", "authenticity_token"=>"GRzc3Wx5mJJwBL32qjpMi24sCZdoWdRZgucldmk7Bmo=", "utf8"=>"✓"}
Completed 500 Internal Server Error in 347ms
ActiveRecord::StatementInvalid (Mysql2::Error: Column 'user_id' cannot be null: INSERT INTO `users_pictures` (`photo_content_type`, `photo_file_name`, `photo_file_size`, `user_id`) VALUES (NULL, NULL, NULL, NULL)):
app/models/user.rb:36:in `create_user_profile'
User.last.user_id を使用して user_id を取得できますが、画像のアップロードからファイル情報を取得するにはどうすればよいですか? POST データにアクセスする必要はありますか? もしそうなら、どうすればいいですか?さらに、ユーザーが最終的に写真をアップロードしようとしたかどうかを確認する必要があります...彼はそうする必要がないからです。これは、フォームによって送信されたある種の画像データがあるかどうかを確認するだけで実行できますか? 前もって感謝します :)