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

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

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

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

解決済

Rails5 form_withとfields_forを使った、複数モデルの更新ができない。

yamaoka_san
yamaoka_san

総合スコア0

Ruby on Rails 5

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

1回答

0評価

0クリップ

3280閲覧

投稿2019/04/17 00:59

前提・実現したいこと

親モデルの入力フォームから子モデルのカラムを更新したい。

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

エラーメッセージは出ないです。子モデルが更新されないだけです。

親モデル(1):frame、 子モデル(複数):img 1対nの関係 [frame.rb] #association has_many :imgs accepts_nested_attributes_for :imgs [img.rb] #association belongs_to :frame, optional: true
[frames_controller.rb] def edit @frame = Frame.find(params[:id]) end def update @frame = Frame.find(params[:id]) @frame.update(frame_update_params) end private def frame_update_params params.require(:frame).permit(:page1, imgs_attributes: [:img_in_order, :id]) end
[frames/1/edit.html.erb] <%= form_with(model: @frame, local: true) do |m| %> <%= m.hidden_field :page1, :value => '1' %> <%= m.fields_for :img do |e| %> <%= e.hidden_field :img_in_order, :value => '1', :name =>'img[img_in_order]', :id =>'img_img_in_order' %> <% end %> <%= m.submit "更新" %> <% end %>

試したこと

Railsフォームのnested_attributesを使って、デフォルト値の異なる複数の関連レコードを作成する方法
Rails5.1からのform_withでnested_formを扱う方法
fields_forの上手な使い方
Active Record Nested Attributes
この記事を主に参考にしながら考えました。

CarrierWaveは使わず、imgモデルはimgの方でcreateできるようになっています。
imgのimg_in_orderカラムに値を入れたいだけです。

<%= m.hidden_field :page1, :value => '1' %> ```page1は動きます。 ```ここに言語を入力 <%= e.hidden_field :img_in_order, :value => '1', :name =>'img[img_in_order]', :id =>'img_img_in_order' %>

img_in_orderは全く値が入りません。
本当に欲しいのは:value=>'1'だけなのですが、fields_forで親モデル(frame)と子モデル(img)を紐づけてしまうと、:idや:nameにおかしな値が勝手に入ってしまうので、正しく更新されているframeモデルの方を参考に入れています。
(この値があっても、取ってしまっても、imgの更新はできませんが)

試した事:
binding.pryだと入力フォーム直後でもimgの値が入っていないようです。
紐付けが上手くいっていないのか、fields_forの書き方がダメなのか、気づく部分は直してこの状態です。

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

ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Rails 5.2.2

今のところは以上です。何か進展があれば、コレ以降に加筆していきます。
どうぞよろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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