2016-05-13 72 views
0

我是Ruby on Rails的新手,我目前正在開發一個項目,讓用戶登錄添加,創建更新刪除Marvel字符。每個角色都有一個名字,描述,出處,聯盟和形象。 我使用Carrierwave進行文件上傳。Rails:ActionController :: InvalidAuthenticityToken添加圖片時

我用scaffold命令,一切工作正常,直到我決定能夠使用.js.erb文件創建和更新我在同一頁面上的字符,而不必將用戶重定向到2個不同的頁面創建和更新。

我每次嘗試使用圖像創建一個字符時都出現以下錯誤。一切正常,當我不添加圖像: 的ActionController :: InvalidAuthenticityToken

我知道已經有問,論壇上的幾個不同的其他類似的問題,但我似乎無法找到答案我的問題。

我正在使用Rails 4.2.6。 我試圖添加gem remotipart,但它沒有解決我的問題。

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 

我希望我提供足夠的信息,在此先感謝!

編輯:
以下是我在讓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包含表單? – Fred

回答

-2
skip_before_action :verify_authenticity_token 

在你的控制器將這個

+0

謝謝你的工作!我簡直不敢相信那是那麼容易......你可能會給出進一步的解釋,說明爲什麼我的程序需要現在的代碼行,但沒有它之前工作正常嗎?我非常感謝你的回答,但我並不是只想在沒有理解的情況下過去那條路線,並且知道它的影響。謝謝 –

+0

使用了authenticity_token,因此當params傳遞給服務器時,它們會被認證,服務器知道它們是預期的。但是有些寶石使用的數據不是通過該令牌「有效」的。做這種跳躍不是一個好習慣,但有時候需要完成,我已經在我的一些應用上完成了,你只需要知道你在做什麼 – Boltz0r

+0

恕我直言,繞過安全而不理解發生了什麼只是爲了接受的虛擬答案對他的長期不利。 – 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。 –