2016-05-13 6 views
0

Я новичок в Ruby-on-rails, и в настоящее время я работаю над проектом, который позволяет пользователю войти в систему, чтобы добавить, создать обновление, удалить символ Marvel. У каждого персонажа есть имя, описание, происхождение, альянс и изображение. Я использовал Carrierwave для загрузки файлов.Rails: ActionController :: InvalidAuthenticityToken при добавлении изображения

Я использовал команду scaffold, и все было нормально, пока я не решил создать и обновить свои персонажи на одной странице, используя файлы .js.erb, вместо того, чтобы перенаправить пользователя на две разные страницы для создать и обновить.

У меня есть следующая ошибка каждый раз, когда я пытаюсь создать персонаж с изображением. все отлично работает, когда я не добавить изображение: ActionController :: InvalidAuthenticityToken

Я знаю, что есть несколько различных другие подобные вопросы уже задавали на форуме, но я не могу найти ответ на моя проблема.

Я использую Rails 4.2.6. Я попытался добавить удалитель драгоценных камней, но он не исправил мою проблему. Код

create.js.erb:

$("#characters").append("<%= escape_javascript(render @character)%>"); 

создать в контроллере:

def create 
@character = Character.new(character_params) 

respond_to do |format| 
    if @character.save 
    format.html { redirect_to @character, notice: 'Character was successfully created.' } 
    format.json { render :show, status: :created, location: @character } 
    format.js 
    else 
    format.html { render :new } 
    format.json { render json: @character.errors, status: :unprocessable_entity } 

    end 
end 

конец

Я надеюсь, что дает достаточно информации, заранее спасибо!

Edit:
Вот код, который я есть в form.html.erb, которые позволяют пользователям добавлять изображения:

<div class="field"> 
    <%= f.label :image %> 
    <%= f.file_field :image %> 
    <% if f.object.image %> 
     <%= image_tag f.object.image.url %> 
     <!--<%= f.label :remove_image %> 
    <%= f.check_box :remove_image %> --> 
    <% end %> 
    </div> 
+0

Не могли бы вы показать нам тогда V iew, содержащий форму? – Fred

ответ

-2
skip_before_action :verify_authenticity_token 

Поместите это в контроллере

+0

Спасибо, что это работает! Я не могу поверить, что все было так просто ... Не могли бы вы дать дополнительные объяснения, почему моя программа нуждается в этой строке кода сейчас, но отлично работает без нее раньше? Я ценю ваш ответ, но я не просто хочу пройти эту линию, не понимая ее, и зная ее влияние. спасибо –

+0

authenticity_token используется так, что когда параметры передаются на сервер, они аутентифицируются, и сервер знает, что они ожидаются. Однако некоторые драгоценные камни используют данные не «действительные» через этот токен. Это нехорошая привычка делать подобные пропуски, но иногда это нужно делать, и я сделал это в некоторых своих приложениях, вам просто нужно знать, что вы делаете – Boltz0r

+0

IMHO, обходя безопасность, не понимая, что происходит, просто чтобы принятый псевдо-ответ не помогает ему в долгосрочной перспективе. – Fred

2

Я думаю, ваши Rails формы теперь не будет оказывать поле CSRF в форма:

<%= form_for @character, :remote => true, :authenticity_token => true,:multipart => true do |f| %> 

..... 

<% end %> 
+0

form_for по умолчанию уже встраивает auth_token – Fred

+0

Работает для меня с Rails 5.1, удаленной формой (simple_form) и CarrierWave без remotipart. –

Смежные вопросы