Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails-carrierwave嵌套表单更新实际上会创建重复_Ruby On Rails_Ruby On Rails 4_Carrierwave_Nested Forms_Nested Attributes - Fatal编程技术网

Ruby on rails rails-carrierwave嵌套表单更新实际上会创建重复

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可以解决这个问题。在这种

我有两种模式:投资组合模式和投资组合模式。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