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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Ruby on Rails 4

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

Q&A

解決済

1回答

3579閲覧

親要素のフィールドから受け取った値を子レコードに反映させたい

takeo7

総合スコア18

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

2クリップ

投稿2016/08/30 08:39

###親要素のフィールドから受け取った値を子レコードに反映させたい
ruby on railsでwebアプリを作っています。
一つのformから親レコードと子レコード二つ作りたいのですが、データベースのカラム【name】に親レコードと同じ値をInsertできず迷走しています。
どうかご助言お願いいたします...。

###該当のソースコード

ruby

1#Controller 2 def create 3 @event = Event.new(event_params) 4 @event.save 5 redirect_to event_path(@event.id) 6 end 7 8 private 9 10 def event_params 11 params[:event].permit(:title, :message, :name, :alternative_date1, :alternative_date2, :alternative_date3, :alternative_date4, :alternative_date5, :remarks, 12 users_attributes: [:name]) 13 end 14 15end
#/models/event.rb class Event < ActiveRecord::Base has_many :users accepts_nested_attributes_for :users validates :name, :title, presence: true end #/models/user.rb class User < ActiveRecord::Base belongs_to :event end
#View <%= form_for (@event) do |f| %> <p class="table-layout"> <span>ニックネーム(必須)</span> <span> <%= f.text_field :name %> #←ここに入力された値を子レコードにも渡したい。 </span> <p/> . . .

###補足情報(言語/FW/ツール等のバージョンなど)
ruby -v 2.2.3
rails -v 4.2.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

『パラメータのデータ構造を分ける手段はあるのはわかるけど、
そこまでするほどじゃないから、データの間借りをしたい』

という意図の質問として回答します。
Userの生成過程に関する記述がないので、憶測で説明します。ご容赦ください。

回答

BEFORE

ruby

1def create 2 @event = Event.new(event_params) 3 @event.save 4 redirect_to event_path(@event.id) 5end

ご提示いただいているこちらですが、以下のように書けばよいかと思われます。

AFTER

ruby

1def create 2 event = Event.new(event_params) 3 event.save 4 event.users.new(name: event.name).save 5 redirect_to event_path(event.id) 6end

トランザクションについて

通常、複数のモデルを同時に保存する場合は、トランザクションを利用します。
いずれか一方のモデルの保存に失敗したとき、まとめて全て無かったことにできます。

ruby

1def create 2 event = Event.new(event_params) 3 Event.transaction do 4 event.save! 5 event.users.create!(name: event.name) 6 end 7 redirect_to event_path(event.id) 8rescue => e 9 # 保存に失敗した時の処理 10end

accepts_nested_attributes_for について

今回はパラメータ構造をeventとuserに分けなかったため、不要と思われます。
この機能を使うと、paramsのevent構造中にuserを含めた時、設定したキー名に応じてRailsが自動的に認識し、
Eventの作成と同時にUserまで作成を行ってくれる便利な機能です。

一方で、この機能はそれ以外の自由度が低くなる特性があるので、型にはまったシーンでしか利用できません。

もし今回無理やりこの機能を使うのであれば、愚直にcreateの冒頭でparamsの必要箇所に
params[:event][:name]からデータを抜き出してコピーすることが、情報一致性を担保しつつ、
accepts_nested_attributes_forを利用出来るかと思います。

投稿2016/09/06 19:32

編集2016/09/06 19:33
TatumakiGen

総合スコア72

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

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

takeo7

2016/09/07 11:20

ご回答ありがとうございます! 今回はデータの構造を分けて対応してしまいましたが、 教えていただいたコードを試させていただきました! そしてできました!! とてもわかりやすい上に補足の説明までいただけて感謝感激です!! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問