我有一个带有属性ID,名称,价格的模型书。我有一个Book的实例:
b1 = Book.new
b1.name = "Blah"
b1.price = 12.5
b1.save
我想复制b1,创建Product模型的另一个实例。我是tryid p1 = b1.clone然后p1.save但它没有用。有什么想法吗?
我的环境是:
编辑: 我的TemporaryProduct模型:
class Admin::TemporaryProduct < ActiveRecord::Base
def self.update_from_web_service(web_service_url)
response = HTTParty.get(web_service_url)
response["webServiceResult"]["product"].each do|element|
unless exists? :orignal_product_id => element['id']
create!(
:name => element['name'],
:price => element['price'],
:amount => element['amount'],
:description => element['description'],
:orignal_product_id => element['id'],
:image => element['image'],
:shop_account_number => element['shopAccountNumber'],
:unit => element['unit']
)
end
end
end
end
产品是创造行动:
def create
@temporary_products = Admin::TemporaryProduct.find_all_by_orignal_product_id(params[:product])
@product = Admin::Product.new(@temporary_products.attributes)
# @product = @temporary_products.clone
respond_to do |format|
format.html { redirect_to(admin_products_url, :notice => 'Admin::Product was successfully created.') }
end
end
我想将所有b1的属性克隆到p1模型。
答案 0 :(得分:8)
我想你想要:
b2 = Book.create(b1.attributes)
修改强>
鉴于您上面的create
操作,我认为您要做的是将@product
开始的行更改为
@temporary_products.each {|tp| Admin::Product.create(tp.attributes)}
这将为每个Product
对象创建一个新的TemporaryProduct
对象,使用与TemporaryProduct
相同的属性。如果这不是你想要的,请告诉我。
答案 1 :(得分:0)
如果by不起作用,则表示数据库中没有新记录,那么您可能希望在保存之前将p1的id设置为null。如果克隆具有与原始相同的id,那么它似乎代表相同的对象。
答案 2 :(得分:0)
您可以在滑轨中使用dup
进行重复记录,例如
b1 = Book.create(name: "example", price: 120)
b1.save
duplicate_record = b1.dup
duplicate_record.save!
或者您可以创建第一个新记录,然后进行重复
希望这对您有用。