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

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

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

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

Ruby on Rails

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

1154閲覧

ruby updateができない(返り値にimageが含めたいです)

fujimon01

総合スコア4

Ruby

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

Ruby on Rails

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2021/03/31 05:04

前提・実現したいこと

rubyで投稿のオリジナルアプリを作っています
目指すゴール:投稿内容編集後、更新ボタンで内容がupdateされること

現状:ActiveStorageでimageを1つ保存
中間テーブルでtag付けしている

usersテーブル
postsテーブル
tagsテーブル
post_tag_relationsテーブル(中間テーブル)

postsテーブル

ColumnTypeOptions
userreferencesnull: false, foreign_key: true
titlestringnull: false
article_texttextnull: false
status_idintegernull: false
category_idintegernull: false

Association

  • belongs_to :user
  • has_many :tags
  • has_many :post_tags

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

投稿内容の編集後、updateメゾッドへ渡りますが値が足りず、
返り値がfalseの際指定したeditアクションを実行する。(updateの失敗)
エラーメッセージは出ていませんが、if @form.valid?でfalseの状態です。

コンソール画面 https://gyazo.com/fe48cdb21e594c28fe3d9afa5e7d197f VSコード画面 https://gyazo.com/43cfd666da9b54d66c87df0b11f605ca

該当のソースコード

posts/controller.rb

ruby

1class PostsController < ApplicationController 2 before_action :set_post, only: [:show, :edit, :update] 3 4  //省略 5 6 def edit 7 @form = PostsTag.new(title: @post.title, article_text: @post.article_text, status_id: @post.status_id, category_id: @post.category_id, user_id: current_user.id, post_id: @post.id,image: @post.image) 8 end 9 10 def update 11 binding.pry 12 @form = PostsTag.new(update_params) 13 if @form.valid? 14 @form.update 15 redirect_to root_path 16 else 17 render :edit 18 end 19 end 20 21 def tag_search 22 return nil if params[:keyword] == "" 23 tag = Tag.where(['name LIKE ?',"%#{params[:keyword]}%"] ) 24 render json:{ keyword: tag } 25 end 26 27 private 28 29 def post_params 30 params.require(:posts_tag).permit(:title, :article_text, :status_id, :category_id, :image, :name).merge(user_id: current_user.id) 31 end 32 33 def update_params 34 params.require(:posts_tag).permit(:title, :article_text, :status_id, :category_id, :image, :name).merge(user_id: current_user.id, post_id: params[:id]) 35 end 36 37 def set_post 38 @post = Post.find(params[:id]) 39 end 40end 41

posts_tag.rb

ruby

1class PostsTag 2 include ActiveModel::Model 3 attr_accessor :title, :article_text, :status_id, :category_id, :image, :name, :user_id, :post_id 4 5 with_options presence: true do 6 validates :title , length: {maximum: 20} 7 validates :article_text , length: {maximum: 300} 8 validates :status_id , numericality: {other_than: 1, message: "は--以外から選んでください"} 9 validates :category_id , numericality: {other_than: 1, message: "は--以外から選んでください"} 10 validates :name 11 validates :image 12 end 13 14 def save 15 post = Post.create(title: title, article_text: article_text, status_id: status_id, category_id: category_id, image: image, user_id: user_id) 16 tag = Tag.where(name: name).first_or_initialize 17 tag.save 18 19 PostTagRelation.create(post_id: post.id, tag_id: tag.id) 20 end 21 22 def update 23 binding.pry 24 @post = Post.where(id: post_id) 25 post = @post.update(title: title, article_text: article_text, status_id: status_id, category_id: category_id, image: image, user_id: user_id) 26 tag = Tag.where(name: name).first_or_initialize 27 tag.save 28 29 map = PostTagRelation.where(post_id: post_id) 30 map.update(post_id: post_id, tag_id: tag.id) 31 end 32end

post/edit.html.erb

ruby

1<div class="inner"> 2 <div class="form__wrapper"> 3 <h2 class="page-heading">投稿内容編集</h2> 4 <%= form_with model: @form, url: post_path, method: :put, local: true do |f| %> 5 <%= render 'shared/error_messages', model: f.object %> 6 7 <div class="field"> 8 <%= f.label :status_id, "公開/非公開 必須" %><br /> 9 <%= f.collection_select(:status_id, Status.all, :id, :name, {class:"genre-select"}) %> 10 </div> 11 12 <div class="field"> 13 <%= f.label :category_id, "カテゴリー 必須" %><br /> 14 <%= f.collection_select(:category_id, Category.all, :id, :name, {class:"genre-select"}) %> 15 </div> 16 17 <div class="tag-field", id='tag-field'> 18 <%= f.label :name, "タグ" %> 19 <%= f.text_field :name, class:"input-tag" %> 20 </div> 21 <div id="search-result"> 22 </div> 23 24 <div class="field"> 25 <%= f.label :title, "記事タイトル" %><br /> 26 <%= f.text_field :title, id:"article_title" %> 27 </div> 28 29 <div class="field"> 30 <%= f.label :image, "投稿画像" %><br /> 31 <%= f.file_field :image, id:"post_image" %> 32 </div> 33 34 <div class="field"> 35 <%= f.label :article_text, "記事テキスト" %><br /> 36 <%= f.text_area :article_text, class: :form__text, id:"prototype_catch_copy" %> 37 </div> 38 39 <div class="actions"> 40 <%= f.submit "更新する", class: :form__btn %> 41 </div> 42 <% end %> 43 </div> 44</div>

試したこと

コンソールで確認(updateメゾットでデバックを行った。)
値はupdateに渡っていた
1| update_params => パラメーターはtrue

bash

1[1] pry(#<PostsController>)> update_params 2 User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 3 ↳ app/controllers/posts_controller.rb:57:in `update_params' 4=> <ActionController::Parameters {"title"=>"test11111", "article_text"=>"testtest", "status_id"=>"2", "category_id"=>"3", "name"=>"NEWカップ", "user_id"=>1, "post_id"=>"18"} permitted: true>

2| params => 中身を確認するとimageが含まれていない?

bash

1[3]pry(#<PostsController>)> params 2=> <ActionController::Parameters {"_method"=>"put", "authenticity_token"=>"9WyNTjyboYOHzWgD5A+/lrbfop/6Lb9IX2Ig0mNrtsiSUowcfwztj0C876r5sWMSWQIEXITW5cYb/CHWACR/FA==", "posts_tag"=><ActionController::Parameters {"status_id"=>"2", "category_id"=>"3", "name"=>"NEWカップ", "title"=>"test11111", "article_text"=>"testtest"} permitted: false>, "commit"=>"保存する", "controller"=>"posts", "action"=>"update", "id"=>"18"} permitted: false>

3| ここからimageの含め方が分からず行き詰まっております。
稚拙な説明で確認に足りないコードがありましたらをコメントいただけますと幸いです
ご指南のほどお願いいたします

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

ruby '2.6.5' gem 'devise' gem 'pry-rails' gem 'active_hash' gem 'gimei' gem 'omniauth-facebook' gem 'omniauth-google-oauth2' gem "omniauth-rails_csrf_protection" gem 'omniauth', '~>1.9.1' gem 'mini_magick' gem 'image_processing', '~> 1.2'

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

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

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

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

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

guest

回答1

0

自己解決

解決しました!ありがとうございました!
DBをリセットしたら動きました!

投稿2021/03/31 06:50

fujimon01

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問