Rails回形针 - 添加动态多个图像

时间:2012-12-14 11:39:40

标签: ruby-on-rails image paperclip

我试图将动态数量的图片添加到名为" 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'

1 个答案:

答案 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 %>