扶手:使用&QUOT复制从一个对象的属性到另一个;属性"方法
问题描述:
让模型引用
有属性 [价格,说明】
让模型发票
有属性 [价格,描述,优先级]
让发票
从模型中的对象发票
带属性的 {价:10,说明:'灯',优先级:10}
Let invoice
an object from Model Invoice
with attributes {price: 10, description: 'lamp', priority: 10}
invoice = {price: 10, description: 'lamp', priority: 10}
比方说,我想复制发票
属性到一个新的报价
。
quote = Quote.new(invoice.attributes)
这引发了错误的优先级
不existe模型引用
。
This raises an error that priority
does not existe in model Quote
.
如何复制发票
属性到一个新的报价
但只有属性,一个报价
能接受吗?
How do I copy invoice
attributes to a new quote
but only the attributes that a quote
can accept?
答
可以的 选择
仅引用
的属性:
Quote.new(invoice.attributes.select{ |key, _| Quote.attribute_names.include? key })
所指出的@aceofspades (但不与动态解决方案),你可以请使用ActiveSupport的的 片
还有:
As noted by @aceofspades (but not with a dynamic solution), you can use ActiveSupport's slice
as well:
Quote.new(invoice.attributes.slice(Quote.attribute_names))