2014-07-25 25 views
0

我有以下车型(含关联):Rails中创建给出嵌套属性关联

Page has_and_belongs_to_many Dimension 

我有一组在我的应用程序定义维度:

{id:1, width: 20, height:30} 
{id:2, width: 40, height:60} 
{id:3, width: 100, height:150} 

当用户创建一页,我想让他设置一系列尺寸,例如:

Page.create({:page_name => 'test', :dimensions_attributes => [{:width => 20, :height => 30}, {:width => 40, height: 60}]) 

这种方法的问题是它会在我的数据库中创建一个新的维度记录,我不想那么做。我想创建方法去尝试找到提供的宽度和高度的尺寸。

我该怎么做?

回答

2

我想你应该在你的模型是,添加的东西的方法是这样的:

def add_dimensions=(dimensions_attributes) 
    dims.each { |attrs| dimensions << Dimension.find_or_create_by!(attrs) } 
end 

然后,你需要在你的电话更换为:dimensions_attributes:add_dimensionsPage.create

+0

rabusmar,很有意思,但是我在哪一点叫这种方法?当我做''Page.create({:page_name =>'test',:dimensions_attributes => [{:width => 20,:height => 30},{:width => 40,height:60}])) ''它会自动创建尺寸。我如何避免这种情况发生? –

+0

查看编辑答案 – rabusmar

+0

噢,真好。我懂了。谢谢!说得通。我会试试 –