2012-07-30 32 views
0

我正在开发Ruby 1.8.7和Rails 2.3.8。 我正在尝试在一个动作中创建相同的id另一个模型。不能创建相同的ID另一种模式

def create 
    id = params[:id] 
    item_master = ItemMaster.new(params[:item_master) 
    item_master.id = id 
    item_master.save 
    item_master_child = ItemMaster.new(params[:item_master_child]) 
    item_master_child.id = id 
    item_master_child.save 
    p item_master 
    # => ItemMaster id: 654, style: 6, icon: 7 
    p item_master_child 
    # => ItemMasterChild id: 654, sub_style: 4, roll: 5 
end 

看来,保存成功完成,但实际上item_master PARAMS变成ID:654,风格:0,图标:0。除id之外的所有参数都变为0. 任何想法?

+0

那么,你应该检查服务器日志上的参数散列。也许这些参数并没有像你期望的那样通过。 – MurifoX 2012-07-30 12:12:42

+0

看看你的'''log/development.log''来查看数据库级别发生了什么! – phoet 2012-07-30 12:27:42

+0

请接受解决您的问题的答案(特别是您之前提出的问题)以保持我们的社区健康。有关详细信息,请参阅http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work/65088#65088。 – 2012-07-30 13:07:28

回答

0

由于它是受保护的属性,所以probrem不能大规模分配ID属性。 我已经解决了这个问题。

设置新的ItemMaster并设置唯一的id属性并保存。 使用后续参数制作新的ItemMasterChild并设置id属性并保存。 然后,通过post atttributes更新ItemMaster attibutes,这工作正常。

更新attibutes应保存item_master_child后。 如果把它放在后item_master.save,属性被设置为0 我不知道为什么....

def create 
    id = params[:id] 
    item_master = ItemMaster.new 
    item_master.id = id 
    item_master.save 
    item_master_child = ItemMaster.new(params[:item_master_child]) 
    item_master_child.id = id 
    item_master_child.save 
    item_master.update_attributes(params[:item_master]) 
end 

感谢您的支持和答复。

0

你可以这样做:

item_master_child.id = item_master.id 
+0

对不起,这不作任何更改。 – DIGITALSQUAD 2012-07-31 01:49:43

0

AFAIK Rails会不会让你指定的东西数据库对象的id字段。 如果您需要以某种方式连接它们,请添加具有'has_one'关系的外键或belongs_to

+0

我很了解。然而,我的顾客desined ID字段关系... – DIGITALSQUAD 2012-07-31 01:51:15

相关问题