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

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

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

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

Q&A

解決済

3回答

1174閲覧

accepts_nested_attributes_forを用いて親モデル子モデルを同時に保存できるようにしたい。

soybeans

総合スコア6

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/27 08:44

#解決したいこと
1つの入力フォームで親モデルUserと子モデルprofileを登録することを試みているが、Userテーブルにしかデータが保存されていないです。
#発生しているエラー
ターミナル上で"Unpermitted parameter: :profile_attributes"というエラーメッセージが表示されている状態です。

#該当のソースコード

ruby:User.rb

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 validates :nickname, presence: true, uniqueness: true 7 has_one :profile 8 accepts_nested_attributes_for :profile 9 validates :encrypted_password, length: { minimum: 7 } 10end

ruby:Profile.rb

1class Profile < ApplicationRecord 2 belongs_to :user, optional: true 3end

ruby:users_controller.rb

1 2class UsersController < ApplicationController 3 def index 4 end 5 6 def new 7 @user = User.new 8 @user.build_profile 9 end 10 11 def create 12 @user = User.new(user_params) 13 @user.save 14 redirect_to users_path(@user) 15 end 16 17 def show 18 end 19 20 private 21 22 def user_params 23 params.require(:user).permit(:nickname, :email, :encrypted_password, profile_attributes:[:family_name, :first_name, :family_name_kana, :first_name_kana, :birth_year, :birth_month, :birth_day]) 24 end 25end

haml:devise/registrations/new.html.haml

1.user 2 .user__info 3 %h1 会員情報入力 4 .user__form 5 .user__input__center 6 = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| 7 = render "devise/shared/error_messages", resource: resource 8 .user__input__top 9 ニックネーム 10 %span.red 11 必須 12 = f.text_field :nickname, autofocus: true, autocomplete: "nickname", class: "text-field", placeholder: "例) みつお" 13 .user__input 14 メールアドレス 15 %span.red 16 必須 17 = f.email_field :email, autofocus: true, autocomplete: "email", class: "text-field", placeholder: "例) test@test.com" 18 .user__input 19 = f.label :password, "パスワード" 20 %em 21 7文字以上 22 %span.red 23 必須 24 = f.password_field :password, autocomplete: "new-password", class: "text-field", placeholder: "例) 半角英数字でお願いします" 25 %label 26 %input.user__input__password{:type => "checkbox"}> 27 パスワードを表示する 28 -# 以下Profilesテーブルに保存するものです。テーブルを作成してから書き換えます。 29 -# 全て :nickname で代用してるので、Profilesのカラム名に合わせてください。 30 = f.fields_for :profile, @user.build_profile do |i| 31 .user__input__identification 32 本人確認 33 .text-gray 34 %p 安心・安全にご利用いただくために、お客さまの本人情報の登録にご協力ください。他のお客さまに公開されることはありません。 35 .user__input 36 お名前(全角) 37 %span.red 38 必須 39 .user__input__name 40 = i.text_field :family_name, placeholder: "例) 今村", class: "user__input__family text-field-n" 41 = i.text_field :first_name, placeholder: "例) 雅史", class: "user__input__first text-field-n" 42 .user__input 43 お名前(カナ) 44 %span.red 45 必須 46 .user__input__name 47 = i.text_field :family_name_kana, placeholder: "例) イマムラ", class: "user__input__family text-field-n" 48 = i.text_field :first_name_kana, placeholder: "例) マサシ", class: "user__input__first text-field-n" 49 .user__input__birth 50 生年月日 51 %span.red 52 必須 53 %br/ 54 = i.select :birth_year, ['---','2020'], class: 'select-field' 55 = i.select :birth_month, ['---','12'], class: "select-field" 56 = i.select :birth_day, ['---','31'], class: "select-field" 57 .text-gray 58 %p ※ 本人情報は正しく入力して下さい。会員登録後、修正するにはお時間を頂く場合があります。 59 .user__input 60 「新規登録する」を押すことにより、 61 %br 62 = link_to "利用規約", class: "ao" 63 に同意したものとみなします。 64 .user__input__actions 65 = f.submit "新規登録", class: 'red-btn'

#試したこと
アソシエーションの確認
strongparameterの内容確認

ruby

1private 2 3 def user_params 4 params.require(:user).permit(:nickname, :email, :encrypted_password, profile_attributes:[:family_name, :first_name, :family_name_kana, :first_name_kana, :birth_year, :birth_month, :birth_day]) 5 end

#補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.2
devise (4.7.1)

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

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

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

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

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

guest

回答3

0

ターミナルに"Processing by Devise::RegistrationsController#create" と記載されており、deviseのRegistrationsControllerのcreateに入力内容が送信されていることがわかりました。"rails g devise:controllers users"でdeviseのコントローラーを生成し、RegistrationsControllerを書き換えることで解決しました。

投稿2020/04/28 00:32

soybeans

総合スコア6

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

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

0

自己解決

ターミナルに"Processing by Devise::RegistrationsController#create" と記載されており、deviseのRegistrationsControllerのcreateに入力内容が送信されていることがわかりました。"rails g devise:controllers users"でdeviseのコントローラーを生成し、RegistrationsControllerでcreateするように書き換えることで解決しました。

投稿2020/04/28 00:31

soybeans

総合スコア6

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

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

0

profile_attributes:[:family_name,
の : のあとに空白を入れるとどうなります?

投稿2020/04/27 08:52

winterboum

総合スコア23284

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

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

soybeans

2020/04/28 00:30

特に変化はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問