前提・実現したいこと
現在、レシピ投稿アプリケーションのタグ付け機能を実装しています。
アプリケーション内容としては、レシピの投稿する際、タグをつけて投稿できる仕組みです。
Formオブジェクトを用いて記述を行ったのですが、投稿ボタンを押しても投稿・保存ができず困っています。
原因がお分かりになる方がいらっしゃいましたらご教授お願い致します。
発生している問題・エラーメッセージ
デスクトップ・ターミナル共にエラーは出力されておりません。
該当のソースコード
recipes_controller
class RecipesController < ApplicationController before_action :move_to_index, except:[:index, :show] def index @recipes = Recipe.order('created_at DESC') end def new @recipe = RecipesTag.new end def create @recipe = RecipesTag.new(recipe_params) if @recipe.valid? @recipe.save return redirect_to root_path else render "new" end end ~~~~~~~省略~~~~~~~~ private def recipe_params params.require(:recipes_tag).permit(:title, :material, :text, :category_id, :time_require_id, :image, :name).merge(user_id: current_user.id) end
models.recipes_tag.rb
class RecipesTag include ActiveModel::Model attr_accessor :recipe_id, :user_id, :title, :material, :text, :category_id, :time_require_id, :image, :name with_options presence: true do validates :recipe_id validates :user_id validates :title validates :material validates :text validates :category_id validates :time_require_id validates :name validates :image end def save recipe = Recipe.create(recipe_id: recipe.id, user_id: user.id, title: title, material: material, text: text, category_id: category_id, time_require_id: time_require_id, image: image) tag = Tag.where(name: name).first_or_initialize tag.save RecipeTagRelation.create(recipe_id: recipe.id, tag_id: tag.id) end end
models.recipe.rb
class Recipe < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions ~~~省略~~~ has_many :recipe_tag_relations has_many :tags, through: :recipe_tag_relations
model.tag.rb
class Tag < ApplicationRecord has_many :recipe_tag_relations has_many :recipes, through: :recipe_tag_relations validates :name, uniquness: true end
view.recipes._form.rb
<%= form_with model: @recipe, url: recipes_path, local: true do |f| %> ~~~省略~~~ <div class="field"> <div class="tag-field", id='tag-field'> <%= f.label :name, "タグ", class:"tag-name" %><br /> <%= f.text_field :name, placeholder: "#時短レシピ(複数入力可)", class:"input-tag" %> </div> </div> ~~~省略~~~ <% end %>
試したこと
recipes_controllerのcreateメソッド内でbinding.pryを記述し中身の確認を行ったところ、paramsと@recipeともにデータは入っていました。
@recipe.valid? では false で返ってきたため、バリデーションに問題があると思いましたが、バリデーションの記述にミスはないように思いました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。