Ruby on rails 使用cocoon gem添加多个图像

Ruby on rails 使用cocoon gem添加多个图像,ruby-on-rails,nested-forms,cocoon-gem,Ruby On Rails,Nested Forms,Cocoon Gem,首先,我必须说我是rails的新手,所以很抱歉这个新手问题。 我有一个后模型,有很多图片 class Post < ActiveRecord::Base has_many :pictures, :dependent => :destroy accepts_nested_attributes_for :pictures, :allow_destroy => true, :reject_if => lambda { |t| t['pictures'].nil? }

首先,我必须说我是rails的新手,所以很抱歉这个新手问题。 我有一个后模型,有很多图片

class Post < ActiveRecord::Base

  has_many :pictures, :dependent => :destroy

  accepts_nested_attributes_for :pictures, :allow_destroy => true, :reject_if => lambda { |t| t['pictures'].nil? }


  belongs_to :user 

  monetize :price

  validates :title, :brand, :model, :price, :year, presence: true

end
我的主要参数是:

  def post_params
  params.require(:post).permit(:title, :decription, :brand, :model, :price,  pictures_attributes: [ :image, :_destroy])
end
我的表格:

 = simple_form_for @post, html: { multipart: true } do |f|


.form-group
  = f.input :title, input_html: { class: 'form-control'}

.form-group
  = f.input :brand, input_html: { class: 'form-control'}

.form-group
  = f.input :model, input_html: { class: 'form-control'}

.form-group
  = f.input :description, input_html: { class: 'form-control'}

.form-group
  = f.input :year,  input_html: { class: 'form-control'} 

.form-group
  = f.input :price,  input_html: { class: 'form-control'}



.form-group
  = f.simple_fields_for :pictures do |pic|
    = render 'picture_fields', f: pic

.links
  = link_to_add_association 'add pictures', f, :pictures, class: "btn btn-default"



= f.button :submit, class: "btn btn-primary"

当我加热submit按钮时,帖子被保存,但无法在显示中重复投递帖子图片。 我的代码中有错误吗?有没有办法知道图片是否已保存?当我使用ruby控制台@post=post.last和@post.pictures时,我会看到:

图片加载2.0ms从图片中选择图片。*其中pictures.post\u id=?[[post_id,34]]
=>这里至少有三件事不对:

首先,您不需要这样做,除非您自然有其他方法使用同一控制器。参数[:图像]始终为零:

if params[:images]
  params[:images].each { |image|
    @post.pictures.create(image: image)
  }
end
第二件事,您的模型似乎有一个属性图像,但在您的形式中,您有:

= f.file_field :picture
老实说,我希望这会引起一个例外,这可能是你的问题的原因。如果是这样的话,你应该把你的问题中遇到的任何异常都贴出来

第三件事:这肯定不是你想要解决的问题,但最有可能的是,在解决了这个问题后,您将发布的下一个问题是:图片中缺少id\u强参数中的属性-这将导致您在每次提交表单时复制所有现有图片+将无法删除图片

编辑:

还有几个潜在的问题。您应该始终在一些包装器中包装cocoon关联—按钮\u to\u add\u关联后面的javascript需要特定的DOM结构,这可能会被覆盖,但使用默认值更容易

 #pictures
  .form-group
    = f.simple_fields_for :pictures do |pic|
      = render 'picture_fields', f: pic

  .links
    = link_to_add_association 'add pictures', f, :pictures, class: "btn btn-default"
另一个潜在的问题是你的局部缺陷。link\u to\u remove\u关联查找具有类嵌套字段的最近父项,并将其删除,除非它是现有记录,在这种情况下,它会添加一些额外的内容并将其隐藏,不相关。问题是,如果您添加了5张图片,然后删除了所有图片,那么剩下的就是5.form-inline.clearfix内容。我看不到你的css,但这可能会导致你的视图不一致/损坏

if params[:images]
  params[:images].each { |image|
    @post.pictures.create(image: image)
  }
end
= f.file_field :picture
 #pictures
  .form-group
    = f.simple_fields_for :pictures do |pic|
      = render 'picture_fields', f: pic

  .links
    = link_to_add_association 'add pictures', f, :pictures, class: "btn btn-default"