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 

回答

0

问题实际上最终成为路线的一部分。我的路线设置为:id实际上指的是portfolio_pic,它实际上应该指向:portfolio。修复我的路线后,更新操作正常工作。