0
我有两个模型:Portfolio和PortfolioPic。 PortfolioPic belongs_to投资组合和投资组合has_many portfoliopics。我有一个嵌套的表单,可以正常工作,并创建belongs_to组合的portfoliopics。但是,当我尝试更新表单而不是更新每个图像时,它会创建新图像。例如,如果首先创建两个图像A和B,然后尝试更新A和B,则数据库将包含两个不同的A和两个不同的b。我之前有过嵌套窗体的问题,但通常在强参数中添加:id到nested_attributes字段可修复此问题。在这种情况下,它没有修复它。有任何想法吗?这里是我的代码:rails - carrierwave嵌套窗体更新实际上会创建重复
投资组合模型:
class Portfolio < ActiveRecord::Base
has_many :portfolio_pics
accepts_nested_attributes_for :portfolio_pics, :allow_destroy => true
end
PortfolioPic型号:
class PortfolioPic < ActiveRecord::Base
belongs_to :portfolio
mount_uploader :port_pic, PortfoliofileUploader
end
者:
require 'carrierwave/processing/mime_types'
class PortfoliofileUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
include CarrierWave::MimeTypes
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :picture, :if => :is_image? do
process :resize_to_fill => [166,166]
end
def extension_white_list
%w(jpg jpeg gif png pdf bmp doc docx)
end
process :set_content_type
process :save_content_type_of_model
def save_content_type_of_model
model.content_type = file.content_type if file.content_type
end
def is_image?(new_file)
new_file.content_type.start_with? 'image'
end
end
Portfolios_controller:
def update
@portfolio = Portfolio.find(params[:id])
if @portfolio.update_attributes(portfolio_params)
flash[:notice] = 'Portfolio has been succesfully updated'
redirect_to profile_path(current_user.profile_name)
end
end
private
def portfolio_params
params.require(:portfolio).permit(portfolio_pics_attributes:[:_destroy,
:title, :port_pic, :content_type, :id])
end