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

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

詳細はこちら
Ruby on Rails

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

Q&A

解決済

1回答

2915閲覧

Ruby on Railsで編集内容を反映

maruo1102

総合スコア7

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/02 05:12

前提・実現したいこと

Ruby on Railsでフリーマーケットアプリを作っています。

Showアクションのページ(商品詳細)から
Editアクションページ(商品編集)に遷移し
そこで入力内容を変更し、「変更する」ボタン(Updateアクション)を押すと
Showアクションのページ(商品詳細)に戻り、かつ編集内容が反映されている
という状態にしたいのですが、できません。
Updateビューを作成せず、実現したいです。

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージはでませんが、編集内容が反映されません

該当のソースコード

Ruby

1 2ファイル名: routes.rb 3 4Rails.application.routes.draw do 5 devise_for :users 6 root to: 'products#index' 7 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 8 resources :users, only: [:show, :edit, :update] 9 resources :products 10 11end 12 13———————————————— 14 15 16ファイル名: products_controller.rb 17 18 def edit 19 @product = Product.find(params[:id]) 20 @user = User.find(params[:id]) 21 end 22 23 def update 24 @product = Product.find(params[:id]) 25 @user = User.find(params[:id]) 26 if @product.save 27 redirect_to product_path, notice: '' 28 else 29 #updateを失敗すると編集ページへ 30 render 'edit' 31 end 32 end 33 34 private 35 def product_params 36 params.require(:product).permit(:title, :image, :text, :price) 37 end 38end 39 40——————————————————————— 41 42ファイル名: products/edit.html.haml 43 44 45%h1 商品の情報を入力 46.li 47出品画像 48= @product.image 49.li 50商品名 51= form_for(@product) do |f| 52 = f.text_field :title, class: '', placeholder: '' 53 .field 54 商品の説明 55 .field 56 = f.text_field :text, class: '', placeholder: '' 57 .li 58 = f.submit "変更する", class: '' 59 .li 60 キャンセル 61 62 63

試したこと

ファイル名:products_controller.rb

if @product.save
の箇所を
if @product.update

に変更したり、

if @product.save redirect_to product_path, notice: '' else #updateを失敗すると編集ページへ render 'edit' end

の箇所を
Editアクションのメソッドに移動してみたりしました。

補足情報(FW/ツールのバージョンなど)

開発環境

  • Ruby 2.5.1
  • Rails 5.2.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

def update
で更新するパラメータを渡していないこと。
また、updateではなく、save(新規作成)をしているのが原因かと。

def update @product = Product.find(params[:id]) @user = User.find(params[:id]) if @product.save redirect_to product_path, notice: '' else #updateを失敗すると編集ページへ render 'edit' end end

def update @product = Product.find(params[:id]) @user = User.find(params[:id]) if @product.update(product_params) redirect_to product_path, notice: '' else #updateを失敗すると編集ページへ render 'edit' end end

update()内はコントローラーから推測で入れましたが、このような感じになるかと。

投稿2019/11/02 05:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

maruo1102

2019/11/02 05:40

解決しました! if @product.save ↓ if @product.update(product_params) に修正しただけで、解決しました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問