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

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

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

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

Q&A

解決済

1回答

1411閲覧

railsでフォームオブジェクトから中間テーブルを通して、それぞれのテーブルに保存したい

nekosugi

総合スコア14

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/11/19 10:42

前提・実現したいこと

railsでフォームオブジェクトから中間テーブルを通して、それぞれのテーブルに保存したいです
(image,title,textはarticlesテーブルに、tagはtagsテーブル)

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

ローカルサーバーを建ててフォームを入力して送ってもデータが保存されません
この時、エラーメッセージが出ないので真因が特定できずに困っています
フォームからデータを送信すると、画面はそのままで入力したものだけが消え、
すり抜けてしまうような挙動になります。

該当のソースコード

中間テーブル **article.rb** class Article < ApplicationRecord has_many :article_tags has_many :tags, through: :article_tags end **tag.rb** class Tag < ApplicationRecord has_many :article_tags has_many :articles, through: :article_tags end **article_tag.rb** class ArticleTag < ApplicationRecord belongs_to :article belongs_to :tag end
articles_Controller class ArticlesController < ApplicationController ~略~ def new @atform = ArticleTagForm.new end def create @article = ArticleTagForm.new(atf_params) if @article.valid? @article.save return redirect_to root_path else render :new end end private def atf_params params.permit(:title, :text, :image).merge(user_id: current_user.id) end end
article_tag_form.rb class ArticleTagForm include ActiveModel::Model attr_accessor :title, :text, :tag, :image, :user_id with_options presence: true do validates :title validates :text validates :tag end def save article = Article.create(title: title, text: text, image: image, user_id: user_id) Tag.create(article_id: article.id, tag_id: tag.id) tag = Tag.where(tag: tag).first_or_initialize tag.save end end
tags_controller class TagsController < ApplicationController def create @article = ArticleTagForm.new(atf_params) end private def atf_params params.permit(:tag).merge(user_id: current_user.id) end end
ビューファイル(articles/new.html.erb) <%= form_with model: @atform, url: articles_path, class: 'article-form', local: true do |f| %> ~略~ <%= f.file_field :image %> <%= f.file_field :title %> <%= f.file_field :tag %> <%= f.file_field :text %> ~略~ <% end %>

試したこと

1)articleコントローラーのcreateアクションにbinding.pryをかけてparamsを確認したら、保存したいデータ自体(image,title,tag,text)は届いている
2)中間テーブルのアソシエーション再確認
3)フォームオブジェクトの資料を読みあさり、各種記述の書き換え

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

ruby on rails 6.0.0

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

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

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

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

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

guest

回答1

0

自己解決

元々タグ機能を実装したかったのですが、結局解決しなかったのでacts-as-taggable-onのgemを使うことにしました。
一瞬で終わりました…

投稿2020/11/25 08:13

nekosugi

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問