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

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

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

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

Ruby

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

Q&A

解決済

2回答

1822閲覧

【Rails】has_manyとbelongs_toを使った1つのフォームで2つのモデルに変更を加える方法ができない

Goi

総合スコア11

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/07/01 09:56

##has_manyとbelongs_toを使って1つのフォーム内で2つのモデルに変更を加えようとするとエラーに

各種モデル

<Company(Model)>

has_many :evaluations accepts_nested_attributes_for :evaluations

<Evaluation(Model)>

belongs_to :company

###ビュー
<new.html.erb>

<%= form_for :company do |f| %> <div class="field"> <%= f.label(:com_name,"会社名") %> <%= f.text_field(:com_name) %><br> </div> <h3>データ入力</h3> <%= f.fields_for :evaluations do |b| %> <div class="field"> <%= b.label(:environment, "給料") %> <%= b.select :environment, options_for_select([["1", 1], ["2", 2],["3", 3], ["4", 4],["5", 5], ["6", 6],["7", 7], ["8", 8],["9", 9], ["10", 10]],), :include_blank => true %><br> </div> <% end %> <% end %>

コントローラー

<controller> ``` def create
@company = Company.new(company_params) if @company.save format.html { redirect_to @company, notice: 'Company was successfully created.' } else format.html { render :new } end end private def company_params params.require(:company).permit(:com_name, :com_type, evaluations_attributes: [:environment, :salary, :overtime, :boss, :corporate_style, :management, :dangerous, :other]) end
##エラー内容 エラー箇所はcontroller内のCompany.newする時の**「company_params」** - **Unpermitted parameter: :evaluations** - **ArgumentError (When assigning attributes, you must pass a hash as an argument.):** ##質問 controllerでネストされた値を受け取れていない(はず)という認識です。 問題はevaluation_attributes: [ネストされている各種値]だと思います。 ただ、どの箇所の記述がおかしいのか見当がつかないため投稿しました。 どなたかお教えいただければ幸いです。(´-`)

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

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

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

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

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

guest

回答2

0

いまいち自信がないですが:environmentはハッシュを格納するんでしょうか?であればですけど、

params.require(:company).permit(:com_name, :com_type, evaluations_attributes: [{environment: [:KEY]}, :salary, :overtime, :boss, :corporate_style, :management, :dangerous, :other])

:KEYの部分には"1"とか"2"の部分に該当するキーを当てはめてもらえればうまくいくのでは、と思います。

投稿2018/07/02 05:48

編集2018/07/02 05:50
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Goi

2018/07/04 12:34

試してみましたがSyntax errorになります・・。 一応下記のようなエラー表示です。 syntax error, unexpected '}', expecting => ... [{:environment [:environment]},
退会済みユーザー

退会済みユーザー

2018/07/04 12:38

ハッシュの「:」の位置逆じゃないですか? シンボルになってます。
Goi

2018/07/04 12:45

あ、お恥ずかしい。 たった今ハッシュにして({environment: [:environment]})で試しましたが、ダメでした。 うまくアソシエーションが機能してなさそうです。
退会済みユーザー

退会済みユーザー

2018/07/04 12:51

であれば関連付けがうまくいってないんだと思います。
guest

0

自己解決

View部分に問題ありでした。

<変更前>
<% form_for :company do %>

<変更後>
<% form_for(@company, url company_index_path) do %>

投稿2018/07/14 07:19

Goi

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問