0

Rails 4 アプリにパラメーターを持つMessageモデルがあります。archivedショー ビューには、パラメータを にbutton_to設定する があります。この関数は、Devise とメーラーをモデルに追加する前は機能していました。ここで、「アーカイブ」ボタンをクリックすると、「ActionController::InvalidAuthenticityToken」エラーが発生します。このエラーを回避するために私が見つけた唯一のことは、に追加することです。ただし、それを行うと、パラメーターは保存されません。archivedtrueMessageskip_before_filter :verify_authenticity_token, :only => [:archive]Messages Controller

button_to リンクを介して認証トークンを渡す方法はありますか? または、セキュリティを損なうことなくこれを達成するためのより良い方法はありますか?

メッセージ.rb

class Message < ActiveRecord::Base

    validates_presence_of :name, :email, :message

    has_one :response

    scope :unread, -> { where(viewed: nil)}
    scope :viewed, -> { where(viewed: true)}
    scope :inbox, -> { where(archived: nil)}
    scope :archived, -> { where(archived: true)}

end

Messagescontroller.rb

class MessagesController < ApplicationController
include MessagesHelper

before_action :authenticate_admin!, :except => [:new]

def index
    @viewed = Message.viewed
    @unread = Message.unread
end

def new
    @message = Message.new
end

def create
    @message = Message.new(message_params)
    if @message.save(message_params)
        Messagemailer.message_created(@message).deliver_now
        redirect_to root_path
        flash.notice = "Message succesfully sent."
    else
        render "new"
        flash.alert = "There was a problem sending your message: "
        flash.alert += @message.errors.full_messages.join(", ")
    end
end

def edit
    @message = Message.find(params[:id])
end

def update
    @message = Message.find(params[:id])

    if @message.update(message_params)
        redirect_to message_path(@message)
        flash.notice = "Message succesfully sent."
    else
        render "edit"
        flash.alert = "There was a problem updating the message: "
        flash.alert += @message.errors.full_messages.join(", ")
    end
end

def view
    @message = Message.find(params[:id])
    @message.viewed = true
    if @message.save
        redirect_to message_path(@message)
    else
        flash.alert = "There was a problem viewing the message"
    end
end

def unview
    @message = Message.find(params[:id])
    @message.viewed = nil
    if @message.save
        redirect_to messages_path
    else
        flash.alert = "There was a problem un-viewing the message"
    end
end

def show
    @message = Message.find(params[:id])
end

def archive
    @message = Message.find(params[:id])
    if @message.save(:archived => true)
        redirect_to messages_path
    else
        flash.alert = "There was a problem archiving the message"
        render :show
    end
end


end

MessagesHelper.rb

module MessagesHelper

def message_params
    params.require(:message).permit(:name, :email, :subject, :message, :viewed, :responded, :archived)
end

end

メッセージ表示ボタン

<%= button_to 'Archive', message_archive_path(@message), :class => 'button' %></div>

どんな助けでも大歓迎です!ありがとう!

編集:

これは明らかに、私のすべてのフォームにも当てはまります。これはデバイスの問題ですか?

4

0 に答える 0