0

我正在尝试将动态数量的图片添加到一个名为“组件”的元素中。环顾四周,我创建了以下代码:

组件.rb

class Component < ActiveRecord::Base
    has_many :images
    accepts_nested_attributes_for :images, :allow_destroy => true
end

图片.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'
4

1 回答 1

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/ 路由中调用您的表单,从而为 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 %>
于 2013-10-22T09:05:19.087 回答