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

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

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

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

Ruby

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Q&A

解決済

1回答

2546閲覧

【Rails】投稿失敗時にタグフォームに入力していた値を保持したい

kazuki_0311

総合スコア7

Ruby on Rails 5

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

Ruby

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

0グッド

0クリップ

投稿2021/05/02 02:57

編集2021/05/03 00:21

前提・実現したいこと

form_withでの投稿で失敗した際に、タグに入力していた情報をそのまま保持しておくやり方をご教授いただきたいです。

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

今回はpostコントローラーを経由してのform投稿なので、postモデルに入っている情報の入力情報保持はできているのですが、中間テーブルを経由してのタグ情報の入力情報の保持が上手く実装できていない状況です。

該当のソースコード

・app/views/post/new.html.slim

.container .row .col-md-6.col-12.offset-md-3 .card .card-body = render 'form', post: @post

・app/views/post/_form.html.slim

= form_with model: post, local: true, id: 'posts_form' do |f| = render 'shared/error_messages', object: post .form-group = f.label :images = f.file_field :images, multiple: true, class: 'form-control' - post.images.each do |image| = image_tag image.url, size: '100x100', class: 'image-thumbnail' .form-group = f.label :body = f.text_area :body, class: 'form-control' .form-group = f.label :tag - post.tags.each do |tag| = f.text_field :tag_name,value: @tag_list, class: 'form-control' = f.submit class: 'btn btn-primary btn-raised'

・app/controller/posts_controller.rb

class PostsController < ApplicationController . . . def new @post = Post.new end def create @post = current_user.posts.new(post_params) @tag_list = params[:post][:tag_name].split(',') if @post.save @post.save_tags(@tag_list) redirect_to posts_path, success: '投稿しました' else flash.now[:danger] = '投稿に失敗しました' render :new end end . . . private def post_params params.require(:post).permit(:body,tags: [],tag_maps: [], images: []) end end

・app/models/post.rb

class Post < ApplicationRecord belongs_to :user mount_uploaders :images, PostImageUploader serialize :images, JSON validates :images, presence: true validates :body, presence: true, length: { maximum: 1000 } has_many :tag_maps, dependent: :destroy has_many :tags, through: :tag_maps has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy has_many :like_users, through: :likes, source: :user has_one :activity, as: :subject, dependent: :destroy scope :body_contain, ->(word) { where('body LIKE ?', "%#{word}%") } # タグ機能のロジック def save_tags(sent_tags) current_tags = tags.pluck(:tag_name) unless self.tags.nil? old_tags = current_tags - sent_tags new_tags = sent_tags - current_tags old_tags.each do |old_name| tags.delete Tag.find_by(tag_name: old_name) end new_tags.each do |new_name| post_tag = Tag.find_or_create_by(tag_name: new_name) tags << post_tag end end end

・db/migrate/20210501062533_create_tags.rb

class CreateTags < ActiveRecord::Migration[5.2] def change create_table :tags do |t| t.string :tag_name, null: false, uniqueness: true t.timestamps end end end

試したこと

post_controllerのcreateアクション時に、postモデルに中間テーブルtag_mapで紐づけているtagモデルからtag_tameをインスタンス変数(@tag_list)に代入し、その@tag_listを_form.html.slimのタグ入力欄にvalue: @tag_listで代入したのですが、これだと保持することになっていない様で、編集した際にタグ情報が予めformに入力されないという問題も発生してしまいました。

またこちらの2記事を参考にしてみたのですが、私の知識不足で上手く実装することができず…

Formに入力した値を維持したままリロードする方法

【Rails】投稿失敗時にフォームに入力していた値を保持したい

恐れ入りますがご教授していただけますと助かります。
よろしくお願いします。

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

rails 5.2.3
ruby 2.6.4
mysql2

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

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

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

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

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

guest

回答1

0

自己解決

すみません。解決しました。

投稿2021/09/19 08:16

kazuki_0311

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問