Rails:两个具有一对一关系的模型,一个控制器



我创建了一个带有用户身份验证的简单Web应用程序。我制作了两个模型:用于用户身份验证的Users和用于附加用户详细信息的Details。它们与CCD_ 3关系密切相关。我在从同一个控制器更新两个模型时遇到问题。

在这种情况下,是否建议使用one-to-one关联(我不愿意在一个表中插入太多字段)?如果是,通过一个控制器处理两个模型的正确方式是什么?

通过轨道铸造检查嵌套模型窗体第1/2部分。看看铸造的铁轨,你肯定会明白:)它解释了很多对很多关系,小粗花呢,你可以一对一地做。

您可能想要查看的一些示例代码:

class Wiki < ActiveRecord::Base
  has_many :revisions 
  has_one :latest_revision, :class_name => "Revision", :order => 'updated_at desc', :limit => 1
  accepts_nested_attributes_for :revisions
end
class Revision < ActiveRecord::Base
  belongs_to :wiki
end

# new Wiki page, first revision
def new
  @wiki = Wiki.new
  @revision = @wiki.revisions.build
end
def create
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end
# adding a Revision to a Wiki page
def edit
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.revisions.build # creating a new revision on edit
end
def update
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end
def show
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.latest_revision
end

是的,使用一对一我们是合理的,正如你所说的那样,将事情划分开来。从控制器访问它们时,只要在模型中正确定义了关联,就应该能够做到这一点。

用户模型必须具有:

has_one : detail

细节模型必须具有:

belongs_to : user

那么,如果在"details"表中有一个名为"userid"的外键,那么一切都应该正常。

现在你可以像一样使用彼此来访问这两个模型

User.find(1).detail

Detail.find(1).user

现在,您可以通过两个控制器以相同的方式更新这两个控制器。

最新更新