carrierwave问题更新用户profil或横幅图片

时间:2014-04-04 12:42:00

标签: ruby-on-rails carrierwave

到目前为止,我得到了一个具有基本信息的模型“utilisateur”。我想添加横幅图片。 我运行rails g uploader bannerrails g migration AddBannerToUtilisateur banner:string,并将mount_uploader :banner BannerUploader添加到模型中(当然我运行db:migrate并重新启动服务器)。

如果我创建一个新的“utilisateur”,我认为上传应该有效(它适用于“utilisateur”的帖子),但在这里,我只想更新当前的“utilisateur”并附上一个新的横幅。 / p>

我无法使用控制器中的UPDATE,因为我必须提供所有“utilisateur”信息。我想创建一个单独的updatebanner函数。

这是我的表格:

<%=form_for :utilisateur, :url => updatecover_path, :html => {:multipart => true} do |f|%>  
<%=f.file_field :banner%>  
<%=f.submit%>
<%end%>

这是我的控制器:

  

def updatecover
  @utilisateur = Utilisateur.find(current_user.id)
  @ utilisateur.banner = params [:utilisateur [:banner]]
  @ utilisateur.save!

     

我知道并且我理解为什么这个功能不起作用,但我不知道该怎么做。无法在网上找到准确的答案或提示。

以下是请求:

  

在2014-04-04 12:26:53 +0200开始发布“/ updatecover”for 127.0.0.1   由UtilisateursController处理#morecover作为HTML参数:   { “UTF8”=&gt; “中✓”,   “authenticity_token”=&gt; “中rncjd3meVuQuSLHxPrwbtEF7Ye0hH7pcNxcLoYy2oeQ =”,   “utilisateur”=&GT; { “旗帜”=&GT;#,   @original_fil ename =“2048.jpg”,@ content_type =“image / jpeg”,   @ headers =“Content-Disposition:form-data;   名= \ “utilisateur [横幅] \”; filename = \“2048.jpg \”\ r \ nConContent-Type:   image / jpeg \ r \ n“&gt;},”commit“=&gt;”Save Utilisateur“}

这是我的路线:

  

匹配“updatecover”=&gt; “utilisateurs#updatecover”,:as =&gt;   :updatecover,:via =&gt; [:得到,:交]

我认为我的错误是基本的。但是我找不到。

由于

这是完整的日志

  

在2014-04-04 15:42:19 +0200开始发布“/ updatecover”for 127.0.0.1   由UtilisateursController处理#morecover作为HTML参数:   { “UTF8”=&gt; “中✓”,   “authenticity_token”=&gt; “中rncjd3meVuQuSLHxPrwbtEF7Ye0hH7pcNxcLoYy2oeQ =”,   “utilisateur”=&gt; {“banner”=&gt;#,@ original_fil   为ename =“轮班s3ctor-跑道攻击 - 10 - 2013预览-36304   (1).jpg“,@ content_type =”image / jpeg“,@ headers =”Content-Disposit ion:   形式数据;名= \ “utilisateur [横幅] \”;   文件名= \“轮班s3ctor-跑道攻击 - 10 - 2013预览-36304   (1).jpg \“\ r \ nC ontent-Type:image / jpeg \ r \ n”&gt;},“commit”=&gt;“保存   Utilisateur“} Utilisateur Load(0.3ms)SELECT”utilisateurs“。* FROM   “utilisateurs”WHERE“utilisateurs”。“id”= $ 1 LIMIT 1 [[“id”,7]]   CACHE(0.0ms)SELECT“utilisateurs”。* FROM“utilisateurs”WHERE   “utilisateurs”。“id”= $ 1 LIMIT 1 [[“id”,7]] CACHE(0.0ms)SELECT   “utilisateurs”。* FROM“utilisateurs”WHERE“utilisateurs”。“id”= $ 1   LIMIT 1 [[“id”,7]]在6ms内完成500内部服务器错误

     

TypeError(没有将Symbol隐式转换为整数):   app / controllers / utilisateurs_controller.rb:28:在[]'

中      

应用程序/控制器/ utilisateurs_controller.rb:28:inupdatecover'

1 个答案:

答案 0 :(得分:1)

更新updatecover操作,如下所示:

def updatecover
  @utilisateur = Utilisateur.find(current_user.id)
  @utilisateur.banner = params[:utilisateur][:banner] ## Notice how params is called
  @utilisateur.save!
end

如果您注意到params哈希:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"rncjd3meVuQuSLHxPrwbtEF7Ye0hH7pcNxcLoYy2oeQ=", "utilisateur"=>{"banner"=>#, @original_fil ename="2048.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"utilisateur[banner]\"; filename= \"2048.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Save Utilisateur"}

params[:utilisateur]会给你:

{"banner"=>#, @original_fil ename="2048.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"utilisateur[banner]\"; filename= \"2048.jpg\"\r\nContent-Type: image/jpeg\r\n">}

现在,为了得到banner,你需要的是params[:utilisateur][:banner],这会产生:

#, @original_fil ename="2048.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"utilisateur[banner]\"; filename= \"2048.jpg\"\r\nContent-Type: image/jpeg\r\n">