0W5E8fPq1EOm4yE
@0W5E8fPq1EOm4yE (Nishio)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

コメント機能実装について

解決したいこと

コメントできるようにしたい。

発生している問題・エラー

ActiveRecord::RecordInvalid in WaycommentsController#create

スクリーンショット 2021-02-06 13.38.28.png

該当するソースコード

class WaycommentsController < ApplicationController
  def create
    @waycomment = Waycomment.create!(@waycomment_params)
    redirect_to way_path(@way.id)
  end

  private

  def waycomment_params
    params.require(:waycomment).permit(:text).merge(user_id: current_user.id, way_id: params[:way_id])
  end
end

class Way < ApplicationRecord
  belongs_to :user
  has_one_attached :image
  has_one_attached :video
  has_many :likes, dependent: :destroy
  has_many :waycomments
  def liked_by(user)
    Like.find_by(user_id: user.id, way_id: id)
  end

  with_options presence: true do
    validates :name
    validates :text
  end
end

class Waycomment < ApplicationRecord
  belongs_to :way
  belongs_to :user
end

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  def self.guest
    find_or_create_by!(nickname: 'ゲスト', email: 'guest@gmail.com', text: 'ゲストです。') do |user|
      user.password = SecureRandom.urlsafe_base64
    end
  end
  has_many :ways
  has_one_attached :image
  has_many :likes
  has_many :waycomments
  with_options presence: true do
    validates :nickname
    validates :text
  end
end

ソースコードを入力
Rails.application.routes.draw do

  devise_for :users, controllers: {
    registrations: 'users/registrations',
    passwords: 'users/passwords'
  }

  devise_scope :user do
    post 'users/guest_sign_in', to: 'users/sessions#new_guest'
  end

  root to: "concretes#index"
  resources :ways do
  resources :likes, only: [:create, :destroy]
  resources :waycomments, only: [:create, :destroy]
  end

  resources :questions
  resources :answers
  resources :words
end

自分で試したこと

・スペルミスがないか確認。
・user,way,waycommentのバリデーションおよびアソシエーションの設定。

0

1Answer

こちらのインスタンス変数 @waycomment_params は 定義してあるメソッドの waycomment_params を使った方が良いかもしれないです.

waycomments_controler.rb
class WaycommentsController < ApplicationController
  def create
    @waycomment = Waycomment.create!(@waycomment_params)
    redirect_to way_path(@way.id)
  end

  private

  def waycomment_params
    params.require(:waycomment).permit(:text).merge(user_id: current_user.id, way_id: params[:way_id])
  end
end
0Like

Comments

  1. 返信遅くなりました!
    ありがとうございます!

    解決しました!
  2. 解決して良かったです

Your answer might help someone💌