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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

911閲覧

データをアップデートしてもデータベースに保存されない

t1gerkngd0m

総合スコア26

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/12/30 01:43

Ruby on railsで簡単なブログ投稿機能を持ったアプリを作成しております。

すでに投稿されたブログの編集機能を実装したいのですが、ブログ本文を編集してボタンを押してもデータベースの値が変化せず、またその原因がわからず困っております。
binding.pryを入れて調べてみましたが、コンソール上ではデータが更新されるのに、データベースは更新されません。
こちら原因についてお答え頂けますと幸いです。

app/controller/blogs_controller.rb

ruby

1class BlogsController < ApplicationController 2 3 before_action :move_to_index, except: :index 4 5 def index 6 @blogs = Blog.order("created_at desc").page(params[:page]).per(5) 7 end 8 9 def new 10 end 11 12 def create 13 Blog.create(blog_params) 14 end 15 16 def destroy 17 blog = Blog.find(params[:id]) 18 blog.destroy 19 end 20 21 def edit 22 @blog = Blog.find(params[:id]) 23 end 24 25 def update 26 blog = Blog.find(params[:id]) 27 blog.update(blog_params) 28 binding.pry 29 end 30 31 private 32 def blog_params 33 params.permit(:body) 34 end 35 36 def move_to_index 37 redirect_to action: :index unless user_signed_in? 38 end 39end

app/vies/edit.html.erb

html

1<div class="row"> 2 <%= form_tag("/blogs/#{@blog.id}", method: :patch, class: "col s12") do %> 3 <div class="row"> 4 <div class="input-field col s12"> 5 <textarea name="body" type="text" class="materialize-textarea" placeholder="本文"><%= @blog.body %></textarea> 6 <input type="submit" value="送信" class="waves-effect waves-light btn"> 7 </div> 8 </div> 9 <% end %> 10</div>

config/routes.rb

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 4 root 'blogs#index' 5 get 'blogs' => 'blogs#index' 6 get 'blogs/new' => 'blogs#new' 7 post 'blogs' => 'blogs#create' 8 delete 'blogs/:id' => 'blogs#destroy' 9 patch 'blogs/:id' => 'blogs#update' 10 get 'blogs/:id/edit' => 'blogs#edit' 11end 12

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • Rail チュートリアル 9.1.2 編集の失敗

https://railstutorial.jp/chapters/updating_and_deleting_users?version=4.2#sec-unsuccessful_edits

にあるように update メソッドの success/fail をチェックするとよいです。

pry でしらべるなら、def update の直後に binding.pry を入れ,
next で実行を進めていき、
update 呼び出しの前後で blog の内容を確認するとよいです。

投稿2018/12/30 03:39

katoy

総合スコア22324

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

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

t1gerkngd0m

2018/12/31 02:33

ありがとうございます!解決しました。 userとblog同士をアソシエーションを組んでいたのが原因だったようです。 アソシエーションを解除したら正常に機能するようになりました。
katoy

2018/12/31 02:43

userとblog に has_meny を付けることは自然なことです。 外してしまっうことで解決というのはマズイのでは? blog の model での validate で user 関係の validate に引っかかって save が失敗していたのではないでしょうか? だとしたら、 validate 内容を確認したり、param にuser 関係の値が不足しているとか を調べるべきと思います。
t1gerkngd0m

2018/12/31 03:03

現時点では、blogのカラムにuserを保存する仕様では無いんです。 ですのでアソシエーションを組んでいることで要求された値を渡すことが出来ず、結果実行されてもロールバックされてました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問