タイトル意味不明かつ、あんまり確証がないのでご指摘をお待ちしてます><
やりたいこと
Carrierwaveを使って画像の保存をしているRailsのアプリケーションに対して、iOS側からPOSTできるようにしたい。
Railsのモデル
モデル名は適当です。適当にしたから余計にわかりにくくなってるかも…
class Post < ActiveRecord::Base
has_many :comments, dependent: :delete_all
end
class Comment < ActiveRecord::Base
belongs_to :post
mount_uploader :image, ImageUploader
end
つまり、
- PostモデルはCommentモデルを複数持っている。
- Commentモデルには画像がある。
なので1つのPostに複数の画像が入る場合がある。
#{Rails.root}/posts
にPOSTのリクエストを投げることでPostモデルが作成される。
Objective-Cのコード
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//POSTするパラメータを設定。
NSDictionary *parameters = @{@"post": @{@"title": @"form-iOS-t"}};
//今回、投稿するための画像はローカルにある画像を使用。
UIImage *image = [UIImage imageNamed:@"one.png"];
NSData *imageData = UIImagePNGRepresentation(image);
//POSTリクエストの作成
[manager POST:@"http://localhost:3000/posts.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// comments_attributes、複数あるならその分[0]内の数字が増えていくと思う。
[formData appendPartWithFileData:imageData name:@"post[comments_attributes[0][image]]" fileName:@"image.png" mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
こうしてPostのリクエストを送ればRails側はCarrierwaveがよしなにしてくれる気がする。
参考資料
ios - AFNetworking post image in nested json - Stack Overflow
iOS App Using Carrierwave with Rails Backend - Stack Overflow
まだこれから検証すること。
- 複数の画像を入れるにはどうしたらいいか。