LoginSignup
5
5

More than 5 years have passed since last update.

Railsのアソシエーションに合わせてAFNetworkingからPOSTする。

Posted at

タイトル意味不明かつ、あんまり確証がないのでご指摘をお待ちしてます><

やりたいこと

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がよしなにしてくれる気がする。

参考資料

まだこれから検証すること。

  • 複数の画像を入れるにはどうしたらいいか。
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5