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

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

ただいまの
回答率

87.95%

ストロングパラメータの検証エラー

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 612

score 21

前提・実現したいこと

railsでwebアプリケーションを作成しています。
ストロングパラメーターの検証エラーを解決したいです。

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

ActiveSupport::MessageVerifier::InvalidSignature

該当のソースコード

cards_controller.rb

class CardsController < ApplicationController
  def index
    @cards = Card.all
  end

  def new
    @card_lists = CardList.all
    @point_lists = PointList.all
    @coupon_lists = CouponList.all
    @card = Card.new
  end

  def create
    @card = Card.new(card_params)

    if @card.save
      redirect_to user_cards_path(@card), notice: "カードを追加しました"
    else
      render "new"
    end
  end

  private
    def card_params
      params.require(:card).permit(
        :name, 
        :address,
        :opening_hours,
        :closing_hours,
        :phone_num,
        :url,
        :image,
        :point_content,
        :coupon_content).merge(user_id: params[:user_id])
    end
end


createアクションの@card = Card.new(card_params)でエラーが起きています

cards/new.html.haml

=render "layouts/header"
.search
.new-contents.row
  - @card_lists.each do |card_list|
    .content-card.col-lg-5
      =image_tag card_list.image, class:"content-card__image"
      %ul.content-card__info
        %li.content-card__info__name
          =card_list.name    
        - @point_lists.each do |point_list|
          %li.content-card__info__point
            =point_list.content   
        - @coupon_lists.each do |coupon_list|
          %li.content-card__info__coupon
            =coupon_list.content        
      =form_with model:@card, url: user_cards_url, method: :post, local: true do |f|
        - @card_lists.each do |card_list|
          =f.hidden_field :name, value: card_list.name
          =f.hidden_field :address, value: card_list.address
          =f.hidden_field :opening_hours, value: card_list.opening_hours
          =f.hidden_field :closing_hours, value: card_list.closing_hours
          =f.hidden_field :phone_num, value: card_list.phone_num
          =f.hidden_field :url, value: card_list.url
          =f.hidden_field :image, value: card_list.image         
        - @point_lists.each do |point_list|
          =f.hidden_field :point_content, value: point_list.content
        - @coupon_lists.each do |coupon_list|
          =f.hidden_field :coupon_content, value: coupon_list.content
        = f.submit "追加", class: 'btn btn-success'


hidden_fieldを使ってformを作成しました。

cardsのマイグレーションファイル(1)

class CreateCards < ActiveRecord::Migration[5.2]
  def change
    create_table :cards do |t|
      t.references :user,          foreign_key: true
      t.string :name,              null: false
      t.string :address,           null: false
      t.time :opening_hours,       null: false
      t.time :closing_hours,       null: false
      t.string :phone_num,         null: false
      t.text :url

      t.timestamps
    end
  end
end
cardsのマイグレーションファイル(2)

class AddContentToCards < ActiveRecord::Migration[5.2]
  def change
    add_column :cards, :point_content, :string
    add_column :cards, :coupon_content, :string
  end
end
cardを新規作成したときのパラメータです

Started POST "/users/1/cards" for ::1 at 2020-03-23 07:22:01 +0900
Processing by CardsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"ms9I2+wCDBTiSRLdcKSPNm1RRdqq632cKvcW0bZ9lGRfrcer0KAgWhvrZ6UfI3FLLYohIPq7z9EV5Ez5csi2qg==", "card"=>{"name"=>"久兵衛", "address"=>"東京", "opening_hours"=>"2000-01-01 11:00:00 UTC", "closing_hours"=>"2000-01-01 22:00:00 UTC", "phone_num"=>"9999999999", "url"=>"http://www.kyubey.jp/", "image"=>"#<ActiveStorage::Attached::One:0x00007f94b8e92498>", "point_content"=>"いか二貫", "coupon_content"=>"200円引き"}, "commit"=>"追加", "user_id"=>"1"}
Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.0ms)

試したこと

MessageVerifierについて調べました。
Cookieで改ざんのチェックに利用していて、検証をおこなっているとわかりました。
なのでauthenticate_tokenの検証でエラーになっていると思い、
下記の記事を参考に
ブラウザを閉じて、やり直しましたがうまくいきませんでした。
https://masamitsu-murase.blogspot.com/2014/06/rails-csrf.html

ご教授のほどよろしくお願いいたします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る