그래서 이미지 및 파일에서 STI로 상속되는 자산 모델이 있습니다. 제품에는 자산으로 많은 이미지가 있습니다. 이 다형성 연결은 잘 작동하지만 모든 자산에 user_id를 추가하는 방법을 알 수 없습니다. 애셋은 이미지 또는 파일과 상관없이 항상 사용자에게 속합니다. 아래 내 코드를 살펴보십시오. 저는 컨트롤러에서 메소드를 작성해야 할 필요가있는 것이 확실하지만 무엇이 확실하지 않습니까? 병합을 시도했습니다 : user_id하지만 콘솔 로그를 볼 때 nil 만 반환합니다. 이상적으로 내가 무엇도 할 싶은 것은 당신이 더 나은에 좋겠, 사용자가 업로드 또는 user.filesSTI & Polymorphic association & user_id
class User < ActiveRecord::Base
has_many :products
has_many :assets
end
class Asset < ActiveRecord::Base
belongs_to :assetable, :polymorphic => true
belongs_to :user
end
class Image < Asset
mount_uploader :filename, ImageUploader
attr_accessible :filename, :assets
end
class Product < ActiveRecord::Base
belongs_to :user
has_many :images, as: :assetable
accepts_nested_attributes_for :images
attr_accessible :name, :price, :images_attributes
validates_presence_of :name
end
class ProductsController < ApplicationController
def create
@product = Product.new(params[:product])
@product.user_id = current_user.id
params[:product][:images_attributes].each do |key, image|
# image.user_id = current_user.id
image.merge(:user_id => 1)
end
@product.save
end
end
그런데
코드의 문제점은 무엇입니까? 오류 또는 예외가 발생합니까? 'image.user_id = current_user.id'가 작동하지 않습니까? – KULKING
오류가 발생하지 않습니다. 저장하면 모든 것이 작동하지만 user_id 아래의 에셋 테이블에는 'null'이 표시되고 콘솔 로그에는 에셋에 대한 MySQL 삽입이 'user_id = nil'로 표시됩니다. 아니요'image.user_id = current_user.id'는 nil로 보여지는 것처럼 작동하지 않습니다. – Peter
'image.merge! (: user_id => 1)'로 바꾸고 params를 래핑하기 전에 배치하십시오. :)하지만 다음 대답을보세요 –