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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1199閲覧

RubyonRailsで関連付けされたモデルのデータ保存時にエラーが発生する

TJMYK

総合スコア82

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2017/10/11 13:01

編集2017/10/11 15:19

Rails 4.2.6を使用して、アプリケーションを構築中です。

以下のようなコードを書きました。

user = User.create([ email: 'hoge@example.com' ]) user_profile = UserProfile.new( name: 'hoge taro' ) user.user_profile << user_profile
class UserProfile < ActiveRecord::Base belongs_to :user end class User < ActiveRecord::Base has_one :user_profile, :foreign_key => 'id' end

テーブル

create_table "user_profiles", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end

期待する動き

user.user_profile << user_profile

上記を実行した時点で、user_profilesにnameが保存される

現状

undefined method `user_profile' for #Array:0x0000000fc865b8

上記がエラーとして出現する。

参考にしたサイト

Railsで関連するデータ(親子関係)を保存する方法あれこれ


お分かりになる方、ご教授頂ければ幸いです。
よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1User.create([ email: 'hoge@example.com' ])

これは

ruby

1User.create( email: 'hoge@example.com' )

こうです。[]がついていると結果は、Userモデルの配列になります。
で、

ruby

1user.user_profile << user_profile

ですが、has_oneだとこのような記述は出来ません。

ruby

1user.user_profile = user_profile

にしましょう。

投稿2017/10/12 08:10

chelsy7110

総合スコア596

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

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

TJMYK

2017/10/12 08:26 編集

ご回答ありがとうございます。大変参考になっております。 追加で質問させていただきたいのですが、 user.user_profile = user_profile をしてみたのですが、データが保存されません。 user.user_profile.save を呼び出してみたりもしましたがデータが保存されませんでした。 何か他にすることはございますでしょうか。
chelsy7110

2017/10/12 08:42

こちらの環境で同じ様な関係のモデル2つの保存を試してみましたが、user.user_profile = user_profileと同じ処理を実行した時点で保存されました。rails cで1行ずつ実行してみてはどうでしょうか?
TJMYK

2017/10/12 09:03

chelsy7110様 この度は、ありがとうございました。 無事保存することが出来ました。 原因は、当初仰っていました、[]をつけたままだったことに起因していたようです。 rails cで実践後、ソースコードに投入してみた処、成功致しました。 この度は、検証までしていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問