Ruby on rails 使用嵌套表单进行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
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