2012-03-24 106 views
0

我有三个型号:Rails的HAS_ONE协会

class User < ActiveRecord::Base 
    has_many :basiccases 
end 

class Basiccase < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :form3_c 
end 

class Form3C < ActiveRecord::Base 
    has_one :basiccases 
end 

我如何添加一个新Form3CBasiccase?我是否需要使用Basiccase控制器或Form3C控制器来创建表单?如果我使用Form3cController我怎么可以设置在BasiccaseController?

+0

'has_one'关系应该放入模型中,而不是控制器。所以如果你有一个'Form3C'模型类,试着在那里添加关系。 'has_one'关系应该和'has_one:basiccase'一样。您通常会从Form3C实例构建'Basiccase':'self.build_basiccase'将构建'belongs_to'' Form3C'的基本案例。 – mliebelt 2012-03-24 17:52:02

回答

4

has_one这样的关系是在模型而不是控制器上定义的。我想你想这(能够添加一个Form3cBasiccase --not确定要的关系往哪个方向走):

class Form3c < ActiveRecord::Base 
    belongs_to :basiccase 
end 

class Basiccase < ActiveRecord::Base 
    belongs_to :user 
    has_one :form3c 
end 

有关生成控制器和形式(视图)的提示,看在this Rails tutorial处,从第6部分开始。

+0

我真的很困惑在哪里保持has_one关系,因为两者都是一对一的。我的要求是用户应该能够添加新的表单到一个基本的case.Can你建议我如何做到这一点? – 2012-03-24 18:26:18

0

外键虽然模型的命名是不是有说服力的,我假设你basiccases表中有一列form3c_id

您需要创建form3c对象的窗体,然后在控制器,你可以建立一个basiccase对象像@form3c_build_basiccase,它会自动采取form3c_id为外键。请参阅this rails cast

或者你可以去form3c模型accepts_nested_attributes_for :basiccase。关于它here