在Rails中将一个模型的属性传递给不同的模型

时间:2014-01-27 00:36:44

标签: ruby-on-rails ruby model

我进行了搜索和搜索,我以为我已经征服了,但这个问题仍然让我感到悲伤。

我有2个模型LineItems和Orders。 LineItems被添加到购物车模型中,这是一个购物车。 LineItems是暂时的,因为我只想在购物车中检查并付款。由于LineItem是临时的,我想在签出时将大多数属性从LineItem传递给New Order。如果LineItem属性的命名与Order属性不同而我只想传递一些参数,我该怎么做?

我也不确定哪种关系最好。

感谢您的帮助!

使用rails 4.0和ruby 2.0

1 个答案:

答案 0 :(得分:2)

我相信这里的关系不会奏效。正如您所提到的,LineItem是临时的。因此,任何关系都将毫无用处,只要从LineItem删除记录,您将无法从订单访问。

所以,你的问题归结为:“如何将一些参数从一个模型复制到另一个模型”。

我认为最直接的方法是执行以下操作:

@order.assign_attributes(:attr1 => @lineitem.attr2, :attr2 => @lineitem.attr3)

如果你有很多属性,你可以创建一个哈希,它将映射@lineitem和@order中的属性名称。它会像

@mapping = { "attr1" => "attr2", "attr3" => "attr4" }
@mapping.each { |lineitem_attr_name, order_attr_name|
  @order.send("#{order_attr_name}=".to_sym, lineitem_attr_name.send(lineitem_attr_name.to_sym))
}