kome1996
@kome1996 (米内 駿)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

「Rails」form_withを用いて、1つのカラムに対して複数のデータを配列に入れた状態でpostしたいです。

前提・実現したいこと

Railsで投稿機能を実装しようとしています。

  • Rails -> 6.1.6
  • MySQL -> 8.0.29
    現状の投稿フォームは下記の通りです。
    スクリーンショット 2022-06-12 15.49.02.png

発生している問題・エラーメッセージ

投稿をDBに保存する際に

8:00  出勤
12:00 昼休憩
17:00 退社

上記のように
"time"カラム

"content"カラム
に複数のデータを配列で持たせるような設計にしたいのですが、現状は「17:00 退社」の部分しかDB上に保存されません。 

コードが下記の通りです。

post_form.html.erb
<%= form_with(model: @micropost, local: true) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.label :occupation, "職種" %>
    <%= f.text_field :occupation %>

    <%= f.label :job, "職業(任意)" %>
    <%= f.text_field :job %>

    <%= f.label :time, "時間" %>
    <%= f.time_field :time %>

    <%= f.label :content, "業務内容" %>
    <%= f.text_area :content, placeholder: "ここに入力" %>

    <%= f.label :time, "時間" %>
    <%= f.time_field :time %>

    <%= f.label :content, "業務内容" %>
    <%= f.text_area :content, placeholder: "ここに入力" %>
  </div>
  <%= f.submit "投稿", class: "btn btn-primary" %>
<% end %>

現状のコードのままpostすると、二つある"time"と"content"のうち、下の方のデータのみDBに登録されます。

※フロントエンドの話になりますが、最終的には、2つ以上"time"と"content"を投稿する場合は「追加」ボタンをクリックすることで、フォームが追加表示されるようにUIを整えたいと考えています。

自分で調べたことや試したこと

このエラーの解決策を検索すると、

  • 別々のテーブルで同名のカラムを両方のテーブルに同時保存
  • 1つのカラムに配列でデータを持たせる
    などの記事は多数存在しましたが、私の疑問点とは記事の内容が異なるものでした。

調べていく中で、DBに複数のデータを保持させるには配列を用いるということは予測できたのですが、

  • form_withでpostする際に、配列でpostすることはできるのか
  • そもそも、DB設計自体を見直すべき内容なのか

この辺りについて考えているうちに八方塞がりになってしまいました。

お忙しい中お手数ですが、ご教授いただけると幸いです。

0

1Answer

現状だと、timecontentも配列になっておらず、
重複した状態になっているからその通りの動作になっています。

Railsは、重複したパラメータ名を無視します。

form_withで配列を扱うことができるかは
こちらが参考になります。

1Like

Your answer might help someone💌