【问题标题】:undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x007fae8c0bfaa8>#<ActionDispatch::Http::UploadedFile:0x007fae8c0bfaa8> 的未定义方法“[]”
【发布时间】:2014-01-16 07:57:48
【问题描述】:

我有嵌套表单与 file_field 列,当我尝试创建它时抛出 用户控制器中的 NoMethodError#update #

的未定义方法“[]”
{
 "utf8"=>"✓",
 "authenticity_token"=>"HFWawKp4RH7+AFV0yQ1cXpzxHDfubKTKkiDiS6QKnJk=",
 "user"=> { 
  "name"=>"Test",
  "image_attributes"=> { 
    "picture"=>#<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"
}

我的模特

class User < ActiveRecord::Base
  attr_accessbile: :name, image_attributes
  has_many :images
  accepts_nested_attributes_for: images
end

class Image < ActiveRecord::Base
  belongs_to :verve_app
  mount_uploader picture, PictureUploader
end

我的控制器

def new
  @user = User.new
  @user.images.build
end

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

我的看法

<%= form_for @user do |f| %>
  <%= f.hidden_field :name, {value: 'Alex'} %>
  <%= f.fields_for :image_attributes do |image| %>
    <%= image.file_field :picture %>
  <% end %>
  <%= user.submit %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1


    【解决方案1】:

    尝试在模型类 :image 上而不是在 :image_attributes 上调用 fields_for。

    替换你的 与 。然后将 image.file_field 更改为 i.file_field

    看看这是否有帮助,或者至少会产生新的错误供我们处理。

    【讨论】:

      【解决方案2】:

      在视图中,将:image_attributes 更改为:images 您的其余代码是正确的,并且此更改应该使其正常工作。如果您想创建多个子实例(图像),只需在您的控制器中构建那么多实例。

      这是一个相关的票证,您可以在其中查看示例:Plural for fields_for has_many association not showing in view

      【讨论】:

        【解决方案3】:

        别忘了你的模型类应该包含上传者的钩子:-)

        mount_uploader :picture, PictureUploader
        

        【讨论】:

          【解决方案4】:

          可能是因为表单需要读取:

          &lt;% f.fields_for :images_attributes do |image| %&gt;(注意复数)

          据我了解,在调用 x_attributes 时,x 需要与模型中的属性声明方式相匹配。本例设置为accepts_nested_attributes_for :images

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-07-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-14
            • 2015-05-22
            相关资源
            最近更新 更多