Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用嵌套表单进行Rails上载_Ruby On Rails_Ruby On Rails 3_Paperclip_Carrierwave - Fatal编程技术网

Ruby on rails 使用嵌套表单进行Rails上载

Ruby on rails 使用嵌套表单进行Rails上载,ruby-on-rails,ruby-on-rails-3,paperclip,carrierwave,Ruby On Rails,Ruby On Rails 3,Paperclip,Carrierwave,当我试图提交一个简单的嵌套表单时,Rails给了我一个错误: NoMethodError in UserController#update undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x3f4e318> 表单(它使用通用表单生成器。可能会导致错误?) 用户模型 class User < ActiveRecord::Base attr_accessible :name, :pics_at

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

NoMethodError in UserController#update
undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x3f4e318>
表单(它使用通用表单生成器。可能会导致错误?)


用户模型

class User < ActiveRecord::Base
  attr_accessible :name, :pics_attributes
  has_many :pics
  accepts_nested_attributes_for :pics
end
class用户
Pics模型

class Pics < ActiveRecord::Base
  belongs_to :user
  attr_accessible :image
  mount_uploader :image, PicUploader
end
classpics
在哪里查找错误

<%= 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 %>

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

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

您应该为
字段传递与在
的嵌套属性中使用的值相同的值。所以
user.fields\u for:pics\u属性
应为
user.fields\u for:pics

解决了这个问题:我尝试了你的解决方案,但如果我只将
:pics_属性
替换为
:pics
,它会给我一个“无法批量分配错误”。此外,如果我在attr\u accessible中将
:pics\u attributes
替换为
:pics
,它会说“Pic expected,got Array”,我发现嵌套的表单非常糟糕。也就是说,如果您具有可访问的属性:pics属性,并且您的关系设置正确,则:pics的
字段将起作用。如果表单中没有显示任何内容,那是因为没有相关的图片。您需要在控制器中构建一个新的控制器。
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