到目前为止,我得到了一个具有基本信息的模型“utilisateur”。我想添加横幅图片。
我运行rails g uploader banner
,rails 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'
答案 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">