Ruby on rails rails-carrierwave嵌套表单更新实际上会创建重复
我有两种模式:投资组合模式和投资组合模式。PortfolioPic属于PortfolioPic,PortfolioPic有许多PortfolioPic。我有一个嵌套表单,可以正常工作并创建属于portfolio的portfoliopics。但是,当我尝试更新表单时,它会创建新的图像,而不是更新每个图像。例如,如果首先创建两个图像A和B,然后尝试更新A和B,则数据库将包含两个不同的A和两个不同的B。我以前在嵌套表单中遇到过这个问题,但通常在强参数中的嵌套属性字段中添加:id可以解决这个问题。在这种情况下,它不是在修复它。有什么想法吗?这是我的密码: 投资组合模型:Ruby on rails rails-carrierwave嵌套表单更新实际上会创建重复,ruby-on-rails,ruby-on-rails-4,carrierwave,nested-forms,nested-attributes,Ruby On Rails,Ruby On Rails 4,Carrierwave,Nested Forms,Nested Attributes,我有两种模式:投资组合模式和投资组合模式。PortfolioPic属于PortfolioPic,PortfolioPic有许多PortfolioPic。我有一个嵌套表单,可以正常工作并创建属于portfolio的portfoliopics。但是,当我尝试更新表单时,它会创建新的图像,而不是更新每个图像。例如,如果首先创建两个图像A和B,然后尝试更新A和B,则数据库将包含两个不同的A和两个不同的B。我以前在嵌套表单中遇到过这个问题,但通常在强参数中的嵌套属性字段中添加:id可以解决这个问题。在这种
class Portfolio < ActiveRecord::Base
has_many :portfolio_pics
accepts_nested_attributes_for :portfolio_pics, :allow_destroy => true
end
这个问题实际上是路线的一部分。我的路线是这样设置的:id实际上是指一个公文包,而实际上它应该指:公文包。修复路由后,更新操作正常工作
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
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