0

У меня есть две модели: портфолио и портфолиоPic. ПортфолиоPic принадлежит_от портфолио и портфолио has_many portfoliopics. У меня есть вложенная форма, которая работает правильно и создает портфолио, которые принадлежат портфолио. Однако, когда я пытаюсь обновить форму, а не обновлять каждое изображение, он создает новые изображения. Например, если сначала я создаю два изображения, A и B, а затем я пытаюсь обновить A и B, база данных будет содержать два разных A и два разных b. Раньше у меня была эта проблема с вложенными формами, но обычно добавление: id к полю nested_attributes в сильных параметрах исправляет это. В этом случае он не фиксирует его. Есть идеи? Вот мой код:rails - обновление вложенной формы несущей волны фактически создает повторы

Портфолио модели:

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 действительно ссылался на портфолио, когда он на самом деле должен был упоминаться: портфолио. После исправления моих маршрутов действие обновления работало правильно.

Смежные вопросы