Rails 4 アプリにパラメーターを持つMessage
モデルがあります。archived
ショー ビューには、パラメータを にbutton_to
設定する があります。この関数は、Devise とメーラーをモデルに追加する前は機能していました。ここで、「アーカイブ」ボタンをクリックすると、「ActionController::InvalidAuthenticityToken」エラーが発生します。このエラーを回避するために私が見つけた唯一のことは、に追加することです。ただし、それを行うと、パラメーターは保存されません。archived
true
Message
skip_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>
どんな助けでも大歓迎です!ありがとう!
編集:
これは明らかに、私のすべてのフォームにも当てはまります。これはデバイスの問題ですか?