質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1258閲覧

Swift UIとRuby on Railsのアプリの連携について

yasukun252

総合スコア34

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/04/24 13:17

編集2021/04/24 13:30

現在、Ruby on Rails歴3年のプログラマの者です。
Ruby on RailsでAPIを実装してWebアプリのiOS版を開発しようと試みております。

そこで、1つ質問なのですが
Ruby on Rails側で実装している、has_manyなどのリレーションはSwift UI側ではどのように実装するのでしょうか?

例えば、、、
Rails側

Post.rb has_many :posts
User.rb belongs_to :user

Swift UI側

UserData.swift struct UserData: Identifiable { var id: Int var name: String }
PostData.swift struct PostData: Identifiable { var id: Int var user_id: Int var context: String }

上記のような例ですと、SwiftUI側でどのように実装すれば、ユーザーと投稿をリレーションさせて同時に作成できますでしょうか?
必要なライブラリなども教えて頂けますと幸いです。
是非、アドバイスなど、よろしくお願いいたします。

Ruby on Railsは3年の実務経験がありますが、Swiftに関しましては全くありませんので、基礎くらいしか理解しておりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/04/24 13:32

Rails で API を書いて、iOS アプリからそれを叩く形になるかと。Web API の開発経験はありますか?
yasukun252

2021/04/24 13:35

Rails側でAPIは書けます。ただ、iOSアプリからそれを叩く形のコードが全く経験が無いため理解できません。上記のような例ですと、どのようなSwiftのコードになるのでしょうか?
hoshi-takanori

2021/04/24 13:50

User や Post の構造体を JSON に変換して API に投げる形になりますが、User と Post を同時に作成するというのはあまり一般的ではない気が。(もちろん、やればできますが。) 重要なのは API の仕様を決めることで、上記の例にはそれが含まれてないのでなんとも言えませんが、例えば GitHub API を叩いてリポジトリを検索する例はこんな感じです。→ https://qiita.com/usk2000/items/1da56e4082822605fca3
yasukun252

2021/04/24 13:57

例えば、Postを作成するAPIは以下のようなものを想定しております。 ``` def create post = Post.new(post_params) post.user = current_user if post.save render json: { status: 'SUCCESS', data: post } else render json: { status: 'ERROR', data: post.errors } end end ``` これを、Swift側から叩くやり方がわかりません。
yasukun252

2021/04/24 14:32

ありがとうございます! API の「仕様」とはどのようなものですか?
hoshi-takanori

2021/04/24 14:58

エンドポイントの URL と、各操作に対応する HTTP のメソッド (GET, POST など) と、パラメータをどういう形でやりとりするかなどの決め事ですね。RESTful API なら大体決まってますが…。あと、認証をどうするかも重要です。 https://qiita.com/mserizawa/items/b833e407d89abd21ee72
yasukun252

2021/04/24 15:04

ありがとうございます! 教えて頂いた情報で実装は出来そうですので、やってみます。 また、不明点などありましたら別の質問でさせて頂きます。
yasukun252

2021/04/24 16:42 編集

ありがとうございます! あと、もう一つ質問なのですが 例えば、投稿に写真の情報が別モデル(PostPhoto)で存在する場合は、Swift側でも別のstructで定義するべきなのでしょうか?
hoshi-takanori

2021/04/24 17:00

いろんなやり方が考えられますが、PostPhoto は Post のサブクラスですか? というか、Post のリストの中に PostPhoto も出現する場合がある感じですか? その場合はたぶん Post に追加の属性 (photoUrl とか?) を Optional (nil を許容する型。逆に言うと、普通の Int や String が nil を許容しません。) で定義するのが良いかも。 https://qiita.com/koher/items/8b6156c8263b9b23c43c あと、画像を良い感じにダウンロード・キャッシュ・表示してくれるライブラリがあると良いのですが、SwiftUI 対応のものはよく知りません…。今調べたら、URLImage というのが良さげかも。 https://github.com/dmytro-anokhin/url-image それから、外部ライブラリの管理ツールも必要ですね。以前は CocoaPods が人気でしたが、今から始めるなら Swift Package Manager の方がお勧めです。(たまに未対応の古いライブラリもありますが…。) https://qiita.com/yum_fishing/items/4fc97af05792153f14b8
yasukun252

2021/04/24 17:10

PostPhotoは、完全に別のクラスです。 Post.rbにhas_manyで関連付けしています! Postのリストの中にはありません。
yasukun252

2021/04/24 17:16

色々とありがとうございます!
yasukun252

2021/04/24 17:19

Swift側でもRails側と同じようなデータベースの構造を持たせるためにCoreDataなどを使う必要はないのですか?
hoshi-takanori

2021/04/24 17:23

アプリをオフラインでも使えるようにするには、Core Data などを使ってデータをキャッシュまたは同期する必要がありますが、ネットに繋がってることを前提に毎回データを取得できるなら不要です。
yasukun252

2021/04/24 17:41

ありがとうございます! 後、PostPhotoが完全に別クラスの場合、どのようにしてPostと同じタイミングで作成するのでしょうか? 例えば、Postは以下のようにして作成します。 var PostArray: [PostData] = makeData() struct PostData: Identifiable { var id: Int var context: String } func makeData() -> [PostData] { var dataArray: [PostData] = [] dataArray.append(PostData(id: 1, context: "aaaa")) return dataArray }
yasukun252

2021/04/24 17:42

検索しても分かりませんでしたので、質問いたしました。初歩的な質問ばかりで申し訳ございません。
hoshi-takanori

2021/04/24 23:00

Post と PostPhoto が完全に別クラスなら、いったん PostPhoto のことは忘れて Post の処理が出来てから考えれば良いのでは。
yasukun252

2021/04/25 09:07

色々とありがとうございます! まずはやってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問