2016-02-04 57 views
0

我有这些模型:轨道4:指定一个关系的记录,另一

ofert.rb

class Ofert < ActiveRecord::Base 
    has_many :purchasing_groups 
end 

purchasing_group.rb

class PurchasingGroup < ActiveRecord::Base 
    belongs_to :ofert 
    has_many :group_goals 
end 

group_goal.rb

class GroupGoal < ActiveRecord::Base 
    belongs_to :purchasing_group 
end 

在控制器动作我试图做这样的事情:

copy_of_last_group_goals = @ofert.purchasing_groups.last.group_goals 

@ofert.purchasing_groups.create 
#@ofert.last_purchasing_group.save! adding this, did not work 
#@ofert.save! This neither work. 
@ofert.purchasing_groups.last.group_goals = copy_or_last_group_goals 
@ofert.save 

以上的作品在本地很好,我也试过它从控制台,它也工作。我有我的应用程序部署在PostgreSQL的Heroku的,这不是在生产工作时,它抛出这个错误:

ActiveRecord::RecordNotSaved (Failed to replace group_goals because one or more of the new records could not be saved): 

我试图拯救purchasing_groups,也节省了ofert,你可以在注释行看到,但只在我的heroku应用程序的控制台中工作,但不是当我直接在部署的应用程序中尝试时。

任何想法?

+0

为什么你只是不使用'a = @ ofert.purchasing_groups.create',然后'a.group_goals = copy_or_last_group_goals'? –

+0

有什么区别?请帮我理解发生了什么=( – SsouLlesS

+0

好吧,甚至复制'GroupGoal'实例也很奇怪,对于新的'PurchasingGroup',你必须创建新的组目标列表(根据你的模式),所以你不能复制数组,是因为你有唯一的'belongs_to:purchasing_group'关系,在其他情况下,你必须将你的模式更改为'PurchasingGroup'和'GroupGoal'之间的多对多关系 –

回答

1

根据我读的代码

copy_of_last_group_goals = @ofert.purchasing_groups.last.group_goals 
@ofert.purchasing_groups.create 
@ofert.purchasing_groups.last.group_goals = copy_or_last_group_goals 
@ofert.save 

你想创建一个新的purchasing_group,并与那名在purchasing_group它之前相同group_goals填充这些行?是对的吗?

如果是这样,那么我会说你不能,因为你没有GroupGoalPurchasingGroup之间的关系has_and_belongs_to_many

+0

你能否提供一个解决方法你认为'a = @ ofert.purchasing_groups.create',然后'a.group_goals = copy_of_last_group_goals'会使俄罗斯人在这个节目中提出的诀窍nts以上? – SsouLlesS

+0

感谢您的提示,这很有帮助,我终于发现这个技巧是使用'dup'方法,而不是将它们分配为变量,这里有一个要点解释了'dup'和'clone' ActiveRecord方法https ://gist.github.com/liwh/1195027 – SsouLlesS