1

我创建了一个带有用户身份验证的简单 webapp。我制作了两个模型:Users用于用户身份验证和Details其他用户详细信息。它们与one-to-one关系有关。我在从同一个控制器更新两个模型时遇到问题。

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

4

2 回答 2

3

通过轨道铸件检查嵌套模型表格第 1/2 部分。检查一下rails cast,你肯定能弄清楚:) 它解释了多对多的关系,小tweeks,你可以一对一地做到这一点。

您可能希望看到的一些示例代码:

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
于 2012-03-19T23:09:58.630 回答
-1

是的,我们有理由使用一对一,正如您所说的那样,将事情分开。只要您在模型中正确定义了关联,就可以从控制器访问它们。

用户模型必须具有:

has_one : detail

并且 Detail 模型必须具有:

belongs_to : user

那么如果你在'details'表中有一个名为'user_id'的外键,一切都应该正常工作。

现在您可以使用彼此访问这两个模型,例如

User.find(1).detail

或者

Detail.find(1).user

您现在可以从他们的两个控制器以相同的方式更新两者。

于 2012-03-19T23:17:53.563 回答