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

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

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

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

Q&A

1回答

690閲覧

rails データが反映されていない

Awtanabe

総合スコア25

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/17 10:31

困っている事

内容Postモデルにひもづく、Todoのカラムが処理の途中で、反映されていない。

初期のデータ

Postモデル id:1 Todoモデル id:1 body: nil post_id:1 todo_params #更新する値 todo: {body: "text"}
def update ActiveRecord::Base.transaction do assign_todos(todo_params) update_status end end def assign_todos(todo_params) todos.attributes = todo_params todo.save end def update_status todo = todos.find{|tood| todo.id == 1} todo.valid? ## ここでfalseになる end todoの中身はこんな感じです Todo id:1 body: nil post_id:1 ## ただ、pryを入れてとめた状態でtodoの中身を確認してみるとbodyに値は入っている。。。 def update_status todo = todos.find{|tood| todo.id == 1} binding.pry ## ここにpryを入れる todo.valid? ## ここでfalseになる end todos.where(post_id:1).firstで検索すると Todo id:1 body: "text" post_id:1

こちらお分かりになる方はいらっしゃいますか?

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

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

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

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

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

guest

回答1

0

なぜ valid?がfalseになるか、の前に updateのcodeに違和感が有ります。
saveして読みなおしてvalid?していますが、これですとsaveの時の失敗の原因がつかめません。
処理を短いmethodに切り分ける という方針は悪くないのでその精神は続けていただくとして、ここでは話をわかりやすくするためにつなげます

def update ActiveRecord::Base.transaction do assign_todos(todo_params) update_status end end def assign_todos(todo_params) todos.attributes = todo_params todo.save end

これですと、todoがupdateすべきインスタンスが入っているか疑わしいです。
どこかで Todo,find(params[:id])していないとならないのですが、やっていますか?

1インスタンスしか使わないのだからtranzastionは大物すぎますから

def update @todo = Todo.find(params[:id]) @todo.attributes = todo_params if @todo.save # 成功した時の処理 else #失敗した時の処理 end end

ですね。
で、なんでsaveにしっぱいたかをみるなら、
方法1. @todo.save! にすると停止して画面にエラーメッセージがでます
方法2. 失敗した時の処理のところに pryを入れ、@todo.errors.messages
をみる

投稿2020/07/17 13:30

winterboum

総合スコア23347

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問