【发布时间】:2013-02-04 11:50:56
【问题描述】:
所以我有一个资产模型,它被图像和文件作为 STI 继承。产品有许多图像作为资产。这种多态关联运行良好,但我不知道如何将 user_id 添加到每个资产。资产始终属于用户,无论它是图像还是文件。请看我下面的代码。我很确定在控制器创建方法中我需要做一些事情,但我不确定是什么?我试过合并 :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
【问题讨论】:
-
代码有什么问题?您是否收到错误或异常?
image.user_id = current_user.id不工作吗? -
我没有收到任何错误。保存时,一切正常,但 user_id 下的资产表显示为“null”,控制台日志将资产的 MySQL 插入显示为“user_id = nil”。不,
image.user_id = current_user.id也不起作用,因为它显示为 nil。 -
image.merge!(:user_id => 1)如果您愿意,请将其放在包装参数之前。 :) 但是看下一个答案
标签: ruby-on-rails ruby-on-rails-3 polymorphic-associations single-table-inheritance