【问题标题】:Rails has_one associationRails has_one 关联
【发布时间】:2012-03-24 17:13:11
【问题描述】:

我有三个模型:

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

如何将新的Form3C 添加到Basiccase?我需要使用Basiccase 控制器或Form3C 控制器来创建表单吗?如果我使用Form3cController 如何在BasiccaseController? 中设置外键

【问题讨论】:

  • has_one 关系应该进入模型,而不是控制器。因此,如果您有 Form3C 模型类,请尝试在其中添加关系。 has_one 关系应该像has_one :basiccase 中的单数关系。您通常会从Form3C 实例构建Basiccaseself.build_basiccase 将构建belongs_to Form3C 的基本情况。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

has_one 之类的关系是在模型而不是控制器上定义的。我想你想要这个(能够将Form3c 添加到Basiccase--不确定你希望关系走向哪个方向):

class Form3c < ActiveRecord::Base
  belongs_to :basiccase
end

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

有关构建控制器和表单(视图)的提示,请查看this Rails tutorial,从第 6 节开始。

【讨论】:

  • 我真的很困惑在哪里保留 has_one 关系,因为两者都是一对一的。我的要求是用户应该能够在基本案例中添加新表单。你能建议我怎么做吗?
【解决方案2】:

虽然您对模型的命名并不那么令人信服,但我假设您的basiccases 表有一列form3c_id

您需要为form3c 对象创建一个表单,然后在控制器中您可以构建一个basiccase 对象,如@form3c_build_basiccase,它将自动将form3c_id 作为外键。参考this rails cast

或者您可以选择form3c 型号accepts_nested_attributes_for :basiccase。看看它here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多