我试图将动态数量的图片添加到名为" component"的元素中。 环顾四周,我创建了这段代码:
component.rb
class Component < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, :allow_destroy => true
end
image.rb
class Image < ActiveRecord::Base
attr_accessible :component_id, :photo_file_size
belongs_to :component, :foreign_key => :component_id
has_attached_file :photo,
:styles => {
:thumb => "75x75>",
:small => "200x200>"
}
end
_form.html.erb
<%= form_for setup_component(@component) , :html => { :multipart => true } do |f| %>
...
<h2> PHOTOS </h2>
<% f.fields_for @component.images.build do |p| %>
<h2>Photo</h2>
<p><%= f.label :data %><br /><%= f.file_field :data %></p>
<% end %>
application_helper.rb
def setup_component(comp)
return comp.images.build if comp.images.empty?
end
因此,当我尝试组建时,我收到以下错误:
undefined method `images_path'
答案 0 :(得分:0)
您收到images_path
错误,因为您没有正确设置表单
为什么此代码不在您的控制器中?
def setup_component(comp)
return comp.images.build if comp.images.empty?
end
您的form_for对象需要有一个明确的变量定义,以允许创建ActiveRecord对象。 Rails获取您分配给form_for
的变量,并使用它为表单构建整个结构,并使用返回路径(如果出现错误)。目前,您的表单构建了一个新图像,这就是它返回images_path错误的原因。
<%= form_for setup_component(@component)
你最好写这个:
#app/controllers/component_controller.rb
def new_image
@comp = Comp.new
@comp.images.build
end
然后您的表单可以从/ new / route中调用,从而为rails提供了一条真正的路径,让您回归。
其次,你的表格有这个:
<% f.fields_for @component.images.build do |p| %>
<h2>Photo</h2>
<p><%= f.label :data %><br /><%= f.file_field :data %></p>
<% end %>
这应该改为:
<%= f.fields_for :images do |p| %>
<h2>Photo</h2>
<p><%= p.label :data %><br /><%= p.file_field :data %></p>
<% end %>