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

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

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

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

Q&A

解決済

2回答

614閲覧

createアクションを呼び出しているつもりがupdateアクションになってしまう

pecchan

総合スコア555

Ruby on Rails 5

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

0グッド

0クリップ

投稿2020/08/07 23:00

編集2020/08/08 09:43

rails5.2です。
初心者な質問で恐縮です。

登録されたメールアドレスの変更画面を作ってます。
new,createで「変更先アドレスの登録」を行い、
updateで変更の反映を行います。

new.htmlから送信ボタンでcreateを呼びたいのですがupdateになってしまいます。
分かる方教えていただけないでしょうか?

エラーメッセージ

No route matches [PATCH] "/email_changes"

routes.rbを色々変更しましたが解消できずにいます。
/config/routes.rb

ruby

1get '/email_changes/new' 2resources :email_changes, only: [:new, :create, :update]

form_forを使ってます
/app/views/email_changes/new.html.erb

ruby

1<div class="row"> 2 <div class="col-md-6 col-md-offset-3"> 3 <%= form_for(@user, :url => {controller: "email_changes", action: "create"}) do |f| %> 4 <%= render 'shared/error_messages', obj: @user %> 5 6 <%= f.label :email, "現在のメールアドレス" %> 7 <%= f.email_field :email, class: 'form-control', value: current_user.email, disabled: true %> 8 9 <%= f.label :new_email, "新しいメールアドレス" %> 10 <%= f.email_field :new_email, class: 'form-control' %> 11 12 <%= f.submit "送信", class: "btn btn-primary" %> 13 <% end %> 14 15 <%= link_to setting_path(current_user), class: "btn btn-default" do %> 16 <i class="fa fa-arrow-left"></i> 17 <span>戻る</span> 18 <% end %> 19 20 </div> 21</div>

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

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

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

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

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

guest

回答2

0

ベストアンサー

推測ですが、@userにid付きのUserインスタンスが入っていないでしょうか?
UsersControllernew()内で@userに何を渡しているかを見たいところです。

Railsのform_*()の仕様なのですが、

  • @userにid付きのインスタンス中身が入っているとupdate
  • @userにid付きのインスタンス中身が入っていないとcreate

が呼び出されるようになっています(確か)

参考:
説明はform_with()に関してですが、おそらくform_for()にも同じ理屈が適用されるのではないか?と思っています。
https://qiita.com/snskOgata/items/44d32a06045e6a52d11c#22-form_with-model-model

見当違いでしたら申し訳ないです;;

投稿2020/08/15 08:00

kumackey

総合スコア59

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

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

pecchan

2020/08/15 08:25

有難う御座います。 すでに自己解決済みでしたが、おっしゃる通りでした。 なのでrailsルールに則りアクション名をかえることにしました。
guest

0

new.htmlから送信ボタンでcreateを呼びたいのですが

そもそも論として、すでにあるUserのメールアドレスを変更するのであれば、newcreateではなく、editupdateを使うのが適切ではないのでしょうか?

投稿2020/08/07 23:10

maisumakun

総合スコア145184

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

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

pecchan

2020/08/07 23:21

有難う御座います。 ここでのnew,createは変更先アドレスの登録だけなのです。 実際の変更は、updateで行うためこのようにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問