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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1431閲覧

Ruby on rails 複数のモデルを条件分岐とAjaxを使って一つのページから更新したい

ArthurLawrence

総合スコア15

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/06/07 01:18

編集2017/06/07 07:29

##複数のモデルを条件分岐とAjaxを使って一つのページから更新したい

たとえば、時間管理アプリをつくるとして

1.はじめの選択肢が、仕事、休憩、遊びの3つあり

2.仕事を選ぶと、startボタンが出現する、押すと時間の計測が始まる

3.stopボタンを押すと、非同期的に仕事モデルにstartを押した瞬間、endを押した瞬間の時間がそれぞれ格納される

4.はじめの選択する場面に非同期的に戻す

時間を動的に習得する部分に関してはなんなくできましたが、複数のモデルを単一のformから非同期的に操作する方法がいまいちわかりません。

複数やり方はあると思いますが、みなさんだったらどういう方針をとりますか?

方針を示してくださるだけでも、ありがたいですができれば
htlmとjsのサンプルコードを書いてくださるとありがたいです。

また、有益なサイト情報の提供もお待ちしています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ツッコミどころが3っつあります。
1つ目は
RDBを使っているのに正規化をしようと言う発想がない
仕事table 色々 started_time finished_time
休息table 色々 started_time finished_time
遊びtable 色々 started_time finished_time
を例えばpolymorphicを使って
仕事table 色々
休息table 色々
遊びtable 色々
タイムレコード started_time finished_time polymorphic_type polymorphic_id
みたいにして切り出せばタイムレコードのみを更新すればよくなります。モデルを切り替える必要はありません。
また、タイムレコードから仕事休息遊びを一覧で見ることができます。

2つ目は

stopボタンを押すと、非同期的に仕事モデルにstartを押した瞬間、endを押した瞬間の時間がそれぞれ格納される

これではブラウザを誤って閉じて閉まった場合はstartを押した瞬間のデータが消えてしまいますが
いいのでしょうか?
3つ目は
Rails5.1以降ですとこれらの処理はrailsに則って作ればturbolinksライブラリが全て非同期処理に
勝手に書き換えてくれます。
なのでajaxを気にする必要はありません。

つまりRailsに従って
0. polymorphicを使ってタイムレコードモデルを作る
0. タイムレコードコントローラーを作る
0. 仕事ボタンを押すとタイムレコードのnewに仕事パラメータを含めて誘導する
0. タイムレコードコントローラーnew methodで仕事モデルとタイムレコードモデルを生成(この時に開始時間を入れる)
0. タイムレコードのnew.html.erbをpartial化してトップ画面にrenderで埋め込む。
0. new.html.erb表示とともにカウントを始める。
0. submitボタンをstopに書き換える
0. カウントしたデータをpostパラメータの中に混ぜて、リダイレクト先をトップページにする
これで完成です。

jsでタイマーを設置する必要はありますが。
ajaxとかhtmlとかは考える必要がありません。

キーワードをググれば大体の情報は出てきます。

あと、初心者マークをつけるといいですよ

投稿2017/06/07 06:30

moke

総合スコア2241

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問