2016-05-13 50 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。 –