小さなフォームをrender_to_string
生成していますが、何らかの理由で CSRF トークンが正しく生成されません (つまり、ヘッダーとは異なり、送信時にユーザーがログアウトされ、ログに「CSRF トークンを確認できません」というメッセージが表示されます)。 )。関連するコードは次のとおりです。
コントローラ:
def publish
@question = @event.questions.find(params[:id])
@question.update_attribute(:published, true) unless @question.published?
Pusher[@event.to_param].trigger('new_question', question: render_question)
redirect_to event_path(@event)
end
private
def render_question
render_to_string('questions/_unanswered_question', locals: {question: @question}, layout: false)
end
def fetch_event
@event ||= current_user.events.find(params[:event_id])
end
私は Pusher を使用していますが、これは次の Javascript を使用してページにレンダリングされているだけであると想定できます。
$("#questions").append(data.question); // data is what I send from Pusher.
そして最後に、パーシャルがレンダリングされます:
.answer
= form_for [@event, question, question.answers.new] do |f|
%h2
= question.title
%ul
- (1..5).each do |n|
- if question.send("answer_#{n}").present?
%li
= f.radio_button :option, n, id: "q_#{question.id}_answer_option_#{n}"
= f.label question.send("answer_#{n}"), for: "q_#{question.id}_answer_option_#{n}"
%p
= f.submit "Answer"
これは、ページに追加しなくても問題なく機能しますが、レイアウト内でレンダリングされます。これはリモート フォームではないことに注意してください。