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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

924閲覧

[Ruby on Rails]tableのデータをformとして送信したい

FumiakiNakao

総合スコア180

Ruby on Rails 5

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/03/11 02:40

rails初学者です。
railsで時間割の作成アプリを作っているのですが、以下のことで悩んでいます。

現在のアプリの仕様

  1. 該当のアドレスにアクセスすると、空の時間割tableおよび、時間割の候補一覧のtableを生成
  2. 時間割のそれぞれのcellはクリックできるようになっており、クリックするとデータベースから

その時間に受けることのできる授業の候補を取得、時間割の候補一覧に反映
3. 時間割の候補一覧のそれぞれの行はクリックできるようになっており、クリックすると、対応する
時間割のcellに授業名を表示
4. 2,3を繰り返すことにより、時間割を作ることができる

なお、2,3の処理に関してはjqueryを用いている。2は非同期通信により時間割の候補一覧のhtmlを取得
反映を行っている。

やりたいこと

作製した時間割(htmlのtable)をpostで送信し、保存
その後HOMEのページにredirectし、「時間割を保存しました」というflashを表示したい

候補として思いついたこと

  1. tabletdそれぞれにinputを割りふり、name属性を指定する。table全体をform-tagで囲み、

それらすべてを送信できるようにする

  1. tableデータをhtmlとして取得。そのhtmlデータをpostで送信する。
  2. 時間割の選択が行われるたびに、コントローラー側で授業を配列として保存。

保存ボタンが押された際にコントローラー側の配列データをデータベースにsaveする

それぞれの候補の不明点やデメリット

  1. 6×6のinputが存在することになり、送信の量が膨大になる

それぞれinputへのname属性の割り振り方がよくわからない
2. 「jqueryでpost通信し、成功した場合HOMEにridirectする」というやり方だと
「時間割を保存しました」というflashが表示できない
(コントローラー側でridirectの処理はエラーが発生してできなかった)
3. セルに時間割を割り当てるごとに通信を行うこととなり、通信量が多くなる

個人的には、候補3であればできそうな気がしています(通信量が気になりますが…)
もし別の方法や、それぞれの方法の改善点などご存知の方がいれば教えていただけると幸いです
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。
私ならですが以下のように実装します。

  1. ページ表示時に時間割テーブルのセルにlink_toでリンクを追加して一意になるdata属性やid属性を追加。

  2. セルクリック時に、ajaxでクリックされたセルのdata属性(またはid属性)をパラメーターとして渡す。

  3. コントローラー側でパラメーターで渡ってきたdata属性(またはid属性)を取得し、候補一覧をDBから取得してjson等で返す。

  4. jQueryで候補一覧のテーブルを更新する。この時どのセルの候補一覧なのかがわかるように、link_toにdata属性をつけておく。

  5. 候補一覧の行がクリックされたら、jQueryで時間割テーブルのセルに授業名を反映する。また、jQueryでform_tag内にhidden_fieldを追加。

  6. 保存ボタンが押されたら、formをsubmitしてDBに保存する。

文章がわかりづらかったらすみません。

投稿2018/03/11 09:49

sakamoty

総合スコア40

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

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

FumiakiNakao

2018/03/12 05:20

なるほど!hidden_field,試してみます ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問