0

当我尝试提交一个简单的嵌套表单时,Rails 给我一个错误:

NoMethodError in UserController#update
undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x3f4e318>

参数是:

{
 "utf8"=>"✓",
 "authenticity_token"=>"HFWawKp4RH7+AFV0yQ1cXpzxHDfubKTKkiDiS6QKnJk=",
 "user"=> { 
  "name"=>"Alex",
  "pics_attributes"=> { 
    "pic"=>#<ActionDispatch::Http::UploadedFile:0x3f4e318
    @original_filename="Beautiful Sky_thumb.jpg",
    @content_type="image/jpeg",
    @headers="Content-Disposition: form-data; name=\"user[pics_attributes][pic]\"; filename=\"Beautiful Sky_thumb.jpg\"\r\nContent-Type: image/jpeg\r\n",
    @tempfile=#<File:C:/Users/Alex/AppData/Local/Temp/RackMultipart20120824-4784-5rmxid>>
  }
 },
"commit"=>"Save User"
}

用户控制器#update

def update
 @user = User.new(params[:user])
 @user.save
end

表单(它使用通用表单生成器。也许这会导致错误?)

<%= form_for :user, url: '/user/update', html: {multipart: true} do |user| %>
  <%= user.hidden_field :name, {value: 'Alex'} %>
  <%= user.fields_for :pics_attributes do |pic| %>
    <%= pic.file_field :pic %>
  <% end %>
  <%= user.submit %>
<% end %>

用户模型

class User < ActiveRecord::Base
  attr_accessible :name, :pics_attributes
  has_many :pics
  accepts_nested_attributes_for :pics
end

图片模型

class Pics < ActiveRecord::Base
  belongs_to :user
  attr_accessible :image
  mount_uploader :image, PicUploader
end

在哪里挖掘错误?

上面的代码是针对 Carrierwave 的,但我尝试切换到 Paperclip 并且错误是相同的。

4

1 回答 1

1

你说你解决了它,但我认为你一开始就做错了。

您应该传递您在nested_atributes_forfor中使用的相同值fields_for。因此 user.fields_for :pics_attributes应该是user.fields_for :pics

于 2012-08-26T11:15:46.417 回答