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

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

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

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

Q&A

解決済

2回答

316閲覧

accepts_nested_attributes_forでネストさせたキーが出力できません。

rui-watanabe

総合スコア18

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/08/21 12:36

前提・実現したいこと

Rails初心者です。
accepts_nested_attributes_forでネストさせキーがビューに出力できません。
binding.pryで確認したparamsには入っているのですが、upadateアクションが働かないので、お分かりになる方がいらっしゃったらご回答いただけると非常に助かります。

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

accepts_nested_attributes_forでネストさせたキーが出力できない

model

user.rb has_one :profile, dependent: :destroy accepts_nested_attributes_for :profile profile.rb belongs_to :user, optional: true

mypages/edition.html.haml

.wrapper = render 'shared/header' = render 'shared/exhibit-btn' .wrapper-mypage .container-mypage = render "shared/sidebar" .chapter .chapter__container %h2.chapter__container__head プロフィール = form_for(current_user, method: :patch) do |f| %input{name: "__csrf_value", type: "hidden", value: "e20dfc21ec93262f69196fe5a8366c8435d61548623e402c57f6f7f298596bf63aa4e7667fc88a67d1d198661496da48f6178a44b45174307897a0dbb04b59e6c"} .setting-profile-icon %figure = image_tag "//static.mercdn.net/images/member_photo_noimage_thumb.png", height: "60", width: "60" = f.text_field :nickname,class:"setting-profile-icon__input",type: "text", value: "#{current_user.nickname}" .setting-profile-content = f.fields_for :profile do |p| = p.text_area :profile,class:"setting-profile-content__textarea", placeholder: "例)こんにちは☆ ご覧いただきありがとうございます!かわいいものやきれいめオフィスカジュアル中心に出品しています。服のサイズは主に9号です。気持ちよくお取引できるよう心がけていますので、商品や発送方法などご質問がありましたらお気軽にどうぞ♪",value: "#{current_user.profile.profile}" = f.submit "変更する", {controller: :users,action: :update,user_id: current_user.id,class: "btn-default"}

users_controller

class UsersController < ApplicationController before_action :authenticate_user! def edit @user = User.find(current_user.id) end def update current_user.update(user_params) redirect_to edit_user_path end private def user_params params.require(:user).permit(:nickname, profile_attributes: [:profile,:id]) end end

updateアクション下でデバックしたparamsの情報

<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"Q6kuEd4gvmVRkCvSZQ01U+xnLIGCAAoGAwXNzRlzJHntJIHFfgF8xIBUVPqcwgMMfhRIG4jfxtN3bezXzNg2iQ==", "__csrf_value"=>"e20dfc21ec93262f69196fe5a8366c8435d61548623e402c57f6f7f298596bf63aa4e7667fc88a67d1d198661496da48f6178a44b45174307897a0dbb04b59e6c", "user"=>{"nickname"=>"hはあff", "profile_attributes"=>{"profile"=>"fcccccccccccccccccccccccccccccccc", "id"=>"1"}}, "commit"=>"変更する", "controller"=>"users", "action"=>"update", "id"=>"1"} permitted: false>

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

Ruby version 2.5.1
Rails version 5.2.3

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

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

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

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

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

guest

回答2

0

自己解決

結局ネストは使わず、Usersテーブルにカラムを足すことで解決しました

投稿2019/08/22 08:52

rui-watanabe

総合スコア18

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

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

0

このままだと謎です。パラメータのさきの DBへのアクションまでのlogも見せて下さい。

気になるのは 関連名とその属性が同じであること。
profile が profile.profile の前なのか後なのかを Rails が混乱・誤解しているのではないか?と懸念

投稿2019/08/21 20:55

winterboum

総合スコア23329

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問