У меня есть две модели: портфолио и портфолио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