🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

8028閲覧

assign_attributes(params[:])がうまく使えせん

sn.jr

総合スコア53

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/14 01:28

編集2019/12/14 13:26

フォームの内容を更新したら、@member.saveできるようにしたいのですがこのようなエラーが出てしまいます。

ArgumentError (When assigning attributes, you must pass a hash as an argument, NilClass passed.
def update @member =current_member @member.assign_attributes(params[:account]) if @member.save redirect_to :account, notice: "アカウント情報を更新しました。" else render "edit" end end

rb

1<%= render "shared/errors", obj: @member %> 2<table class="attr"> 3 <tr> 4 <th><%= form.label :name %></th> 5 <td><%= form.text_field :name %></td> 6 </tr> 7 <tr> 8 <th><%= form.label :birthday, 9 for: "member_birthday_li"%></th> 10 <td><%= form.date_select :birthday, 11 start_year: 1970, end_year: Time.current.year, 12 use_month_numbers: true%></td> 13 </tr> 14 <% if controller.kind_of?(MembersController)%> 15 <tr> 16 <th><%= form.label :email %></th> 17 <td><%= form.text_field :email %></td> 18 </tr> 19 <tr> 20 <th><%= Member.human_attribute_name(:administrator) %></th> 21 <td> 22 <%= form.check_box :administrator %> 23 <%= form.label :administrator %> 24 </td> 25 </tr> 26 <%end%> 27</table>

###試したこと
@member.assign_attributes(params[:account])の部分を決してみたら、@member.saveできたので問題は@member.assign_attributes(params[:account])にあるかと推測します。

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

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

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

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

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

winterboum

2019/12/14 09:03

viewのcodeもしくはこのエラーのときのlogを見せて下さい。 両方がいいかな
sn.jr

2019/12/14 12:25

<% @page_title = "マイアカウント情報の編集"%> <h1><%= @page_title%></h1> <div class="toolbar"><%= link_to "マイアカウントに戻る", :account%></div> <%= form_with model: @member, as: "account" do |form|%> <%= render "shared/member_form", form: form %> <div><%= form.submit %></div> <%end%>
sn.jr

2019/12/14 12:26

どうやら今確認したらできているみたいです!おさわがせしました!
sn.jr

2019/12/14 13:16

成功してませんでした。。。
sn.jr

2019/12/14 13:17

form_forに戻したら同じようなエラーが出ました。form_withだと指定のコントローラーに飛んでくれてなかったみたいです。
winterboum

2019/12/14 13:19

shared/member_form と エラーが起きた時のlogを見せて下さい
sn.jr

2019/12/14 13:25

app/controllers/accounts_controller.rb:14:in `update' Started PATCH "/account" for 127.0.0.1 at 2019-12-14 22:23:24 +0900 (0.1ms) SELECT sqlite_version(*) Processing by AccountsController#update as JS Parameters: {"authenticity_token"=>"Zjm+1CdwOgxpLKeu1BpPzVYdFjWFvvkdxxhd4HTkj4Los7PkHb2KnPqTkvTCU+0SxMw==", "member"=>{"name"=>"ski", "birthday(1i)"=>"2001", "birthday(2i)"=>"7", "birthday(3i)"=>"13"}, "commit"=>"更新する"} Member Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:4:in `current_member' CACHE Member Load (0.0ms) SELECT "members".* FROM "members" WHERE "members"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:4:in `current_member' "0909090" Completed 500 Internal Server Error in 9ms (ActiveRecord: 0.8ms | Allocations: 8511) ArgumentError (When assigning attributes, you must pass a hash as an argument, NilClass passed.): app/controllers/accounts_controller.rb:14:in `update'
sn.jr

2019/12/14 13:25

こちらでしょうか?
guest

回答2

0

ベストアンサー

logを見ると
"member"=>{"name"=>"ski", "birthday(1i)"=>"2001", "birthday(2i)"=>"7", "birthday(3i)"=>"13"},
となっています。 "account"=>{} では無いです。
なので、params[:account] は nil になり、Hashじゃないと怒られます。
params[:member] にしてみて下さい

投稿2019/12/14 13:32

winterboum

総合スコア23567

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

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

sn.jr

2019/12/14 13:39

できました!ただ書籍にはparams[:account]と書いてあるので不思議です、、
sn.jr

2019/12/14 13:41

<%= form_with model: @member, as: "account", url: :account do |form|%>を <%= form_for @member, as: "account", url: :account do |form|%>に直したらparams[:account]でもできました!
guest

0

@member.assign_attributes(NEW_ATTRIBUTES)
引数のNEW_ATTRIBUTESはHashで与えてください。
(エラーメッセージを和訳しただけなのですが...)

投稿2019/12/14 05:21

NCC1701

総合スコア1680

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

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

sn.jr

2019/12/14 12:26

今確認したところ成功したみたいです!アドバイスありがとうございます!
sn.jr

2019/12/14 13:15

成功してませんでした、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問