QA@IT
«回答へ戻る

import(s)だと誤解を生みそうだったので、トランザクションリソースですよと言うのを明記

887
-importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、importという名前のリソースを作るという解釈でルーティングを作っています。
+やり方はいろいろありますが、データインポートなど複数のリソースに影響を及ぼす、バッチ的な動きをさせたい場合には「トランザクションリソースを作る」という考え方でリソース設計するようにしたところ、いろいろ捗りました。
 
-ですから、ルーティングは
+たとえば今回の例でも「インポート処理: import_job」を作るという風に考えると、ルーティングは
 
 ```
-resouces :imports
+resouces :import_jobs
 ```
 
 としておき、
 
-* `GET  /imports/new (ImportsController#new)` でインポート用のフォームなどを表示し、
-* `POST /imports  (ImportsController#create)` で実際のインポート処理をはじめる感じで作りました。
+* `GET  /import_jobs/new (ImportJobsController#new)` でインポート用のフォームなどを表示し、
+* `POST /import_jobs  (ImportJobsController#create)` で実際のインポート処理をはじめるなど、いろいろやりようがあります。
 
-実際に取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDBに保存しました。その後で、
+私が実アプリで取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDB(import_jobsテーブル)に保存しました。その後でワーカーに流し、
 
-* `GET /imports/:id` で進捗状況や実行結果を表示
+* `GET /import_jobs/:id` で進捗状況や実行結果を表示
 
-という作りにしました。
+という作りにしました。ポイントは『処理の固まり』を作るのもリソース作成としてとらえることです(なんでもかんでもやると妙ちくりんですが)。
 
 blogsのなかにネストさせるなど細かいやりようはいろいろあると思いますが、こんな形でいかがでしょうか。
+
+----
+編集前は'import'を勧めていましたが、考え方は変わらず、importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、import(取り込み処理)というリソースを作成したという解釈でimportという名前でもいいかなと思ったのでした。

やり方はいろいろありますが、データインポートなど複数のリソースに影響を及ぼす、バッチ的な動きをさせたい場合には「トランザクションリソースを作る」という考え方でリソース設計するようにしたところ、いろいろ捗りました。

たとえば今回の例でも「インポート処理: import_job」を作るという風に考えると、ルーティングは

resouces :import_jobs

としておき、

  • GET /import_jobs/new (ImportJobsController#new) でインポート用のフォームなどを表示し、
  • POST /import_jobs (ImportJobsController#create) で実際のインポート処理をはじめるなど、いろいろやりようがあります。

私が実アプリで取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDB(import_jobsテーブル)に保存しました。その後でワーカーに流し、

  • GET /import_jobs/:id で進捗状況や実行結果を表示

という作りにしました。ポイントは『処理の固まり』を作るのもリソース作成としてとらえることです(なんでもかんでもやると妙ちくりんですが)。

blogsのなかにネストさせるなど細かいやりようはいろいろあると思いますが、こんな形でいかがでしょうか。


編集前は'import'を勧めていましたが、考え方は変わらず、importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、import(取り込み処理)というリソースを作成したという解釈でimportという名前でもいいかなと思ったのでした。

やり方はいろいろありますが、データインポートなど複数のリソースに影響を及ぼす、バッチ的な動きをさせたい場合には「トランザクションリソースを作る」という考え方でリソース設計するようにしたところ、いろいろ捗りました。

たとえば今回の例でも「インポート処理: import_job」を作るという風に考えると、ルーティングは

```
resouces :import_jobs
```

としておき、

* `GET  /import_jobs/new (ImportJobsController#new)` でインポート用のフォームなどを表示し、
* `POST /import_jobs  (ImportJobsController#create)` で実際のインポート処理をはじめるなど、いろいろやりようがあります。

私が実アプリで取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDB(import_jobsテーブル)に保存しました。その後でワーカーに流し、

* `GET /import_jobs/:id` で進捗状況や実行結果を表示

という作りにしました。ポイントは『処理の固まり』を作るのもリソース作成としてとらえることです(なんでもかんでもやると妙ちくりんですが)。

blogsのなかにネストさせるなど細かいやりようはいろいろあると思いますが、こんな形でいかがでしょうか。

----
編集前は'import'を勧めていましたが、考え方は変わらず、importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、import(取り込み処理)というリソースを作成したという解釈でimportという名前でもいいかなと思ったのでした。

回答を投稿

importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、importという名前のリソースを作るという解釈でルーティングを作っています。

ですから、ルーティングは

resouces :imports

としておき、

  • GET /imports/new (ImportsController#new) でインポート用のフォームなどを表示し、
  • POST /imports (ImportsController#create) で実際のインポート処理をはじめる感じで作りました。

実際に取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDBに保存しました。その後で、

  • GET /imports/:id で進捗状況や実行結果を表示

という作りにしました。

blogsのなかにネストさせるなど細かいやりようはいろいろあると思いますが、こんな形でいかがでしょうか。

importは名詞でもあるので(ごさんこう: http://ejje.weblio.jp/content/import )、importという名前のリソースを作るという解釈でルーティングを作っています。

ですから、ルーティングは

```
resouces :imports
```

としておき、

* `GET  /imports/new (ImportsController#new)` でインポート用のフォームなどを表示し、
* `POST /imports  (ImportsController#create)` で実際のインポート処理をはじめる感じで作りました。

実際に取り組んだときは、インフラの都合上非同期にインポートジョブを実行させたかったので、createアクションの中でいったん必要な情報をDBに保存しました。その後で、

* `GET /imports/:id` で進捗状況や実行結果を表示

という作りにしました。

blogsのなかにネストさせるなど細かいやりようはいろいろあると思いますが、こんな形でいかがでしょうか。