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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

408閲覧

複数のインスタンスを作成できるformの作り方

127haruki

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/05/13 11:50

編集2019/05/14 04:48

実現したいこと

投稿フォームの実装

###前提
現在ruby on rails で初心者webプログラマのスキルを棚卸できるようなページを作ろうと考えています。
サイトの構成としては
チェックボックス
上記の様なチェックボックスにチェックしてもらい結果ページを表示して、足りていない箇所に気づいてもらう様な仕組みです。
そこで下記の様にデータベース設計をしました。(achievementのflagはユーザーが任意の項目にフラッグを立ててあとで確認できる様にする予定、今回は実装しない予定です。)
データベース設計
このうち今回user achievement contentテーブルを使って実装をします。
contentテーブルには質問内容(180問程度)が格納されております
それを使い上記チェックシートフォームみたいなものを作り、自分ができているレベルに応じてlevelカラムに数字をフォームで送信して、achievementテーブルでユーザーの達成度を管理しようと考えています。

contentテーブル中身

###発生している問題
上記サイトの様に180問分の新しいachievementインスタンスを一つのボタンで送る方法がわかりません。参考になるサイトなどありましたらご教授いただけないでしょうか。
データベース設計がそもそも間違っているなどの指摘でも構いません。よろしくお願いいたします。

試したこと

foam_forでの実装

補足情報(FW/ツールのバージョンなど)

ruby '2.5.1'
rails '~> 5.2.3'
sqlite3
ここにより詳細な情報を記載してください。

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

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

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

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

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

iwamot

2019/05/14 03:57

本質的な部分ではないかもしれませんが、achievementのflagはどういう目的のカラムなのでしょうか?
127haruki

2019/05/14 04:46

コメントありがとうございます。ユーザーが任意の項目にフラッグを立ててあとで確認できる様にする予定でした!追記しました!
guest

回答1

0

ベストアンサー

flagのことを抜きに考えると、form_tagを使って下記のようなHTMLを出力する案が浮かびました。

html

1<form action="xxx" method="post"> 2<table> 3<tr> 4<td>1. イライラする</td> 5<td><input type="radio" name="level_1" value="1">ほとんどない</td> 6<td><input type="radio" name="level_1" value="2">時々ある</td> 7<td><input type="radio" name="level_1" value="3">よくある</td> 8</tr> 9<tr> 10<td>2. 不安だ</td> 11<td><input type="radio" name="level_2" value="1">ほとんどない</td> 12<td><input type="radio" name="level_2" value="2">時々ある</td> 13<td><input type="radio" name="level_2" value="3">よくある</td> 14</tr> 15... 16</table> 17<p><input type="submit" value="送信"></p> 18<input type="hidden" name="user_id" value="1"> 19</form>

コントローラ側ではparamsをループして、キーがlevel_Xであれば「_」以降をcontent_idとみなし、achievementインスタンスを作ってsaveしていくイメージです。leveluser_idは送信値を使います。

もっと適切な方法があるかもしれませんが、こんな方法でも目的は達せられるんじゃないかと思いました。

投稿2019/05/14 09:54

iwamot

総合スコア1154

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

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

127haruki

2019/05/15 03:07

なるほどそうやって識別させていく方法があるんですね!!全然思いつかなくて困っていたので大変助かりました、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問