0

だから私はSTIとして画像やファイルに継承される資産モデルを持っています。製品には、有益なものとして多くの画像があります。このポリモーフィックな関連付けは正常に機能していますが、すべてのアセットにuser_idを追加する方法がわかりません。アセットは、そのイメージまたはファイルに関係なく、常にユーザーに属します。以下の私のコードを見てください。コントローラのcreateメソッド内で何かする必要があることは確かですが、何がわからないのでしょうか。:user_idをマージしようとしましたが、コンソールログを見るとnilが返されます。理想的には、@ user.imagesも実行したいのですが、これは、ユーザーがアップロードしたすべての画像、または@user.filesを表示します。

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
4

1 に答える 1

0
def create
  params[:product][:images_attributes].each do |key, image|
    image.merge!(:user_id => current_user.id)
  end

  @product = Product.new(params[:product])
  @product.user_id = current_user.id

  @product.save
end

ちなみに、継承ロジックをモデルに置き換えることをお勧めします。

class Image < Asset
  mount_uploader :filename, ImageUploader
  attr_accessible :filename, :assets

  before_save do
    self.user = assetable.try(:user)
  end
end

# controller

def create
  @product = Product.new(params[:product])
  @product.user = current_user
  @product.save
end
于 2013-02-04T14:16:32.993 に答える