Ruby on rails 使用cocoon gem添加多个图像
首先,我必须说我是rails的新手,所以很抱歉这个新手问题。 我有一个后模型,有很多图片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? }
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"