将id存储在用户表中的模型2方式关系



我正在努力理解在创建一个模型记录时,如何将其ID存储在一个单独的活动记录表(在本例中为用户表)中。

基本上,我有两个模型。CCD_ 1的用户和CCD_。在我的应用程序中,用户只能有一个税务记录,目前我通过将user.id存储在税务模型的一列中,并检查前过滤器来查看用户是否已经创建了税务记录(该过滤器会检查他们的user.id是否在表中)来实现这一点

create_table "taxes", force: true do |t|
t.integer  "user_id"
t.integer  "income"
t.integer  "taxes"
.....

请记住,这一切目前都在index操作中,这有点毫无意义,因为用户只能有一个税务记录,并且只能查看自己的税务记录。它应该通过我假设的show操作来完成。

现在的问题是,当用户创建他们的单一税务记录时,税务模型是这样设置的,所有这些都与税务活动记录表交互:

def store_raw_taxes
tax = Tax.new(user_id: user.id, income: income, taxes: taxes, rrsp: rrsp)
tax.save
end

为了使用show(并检查用户是否已经创建了税务记录),我想将tax_id存储在他们行的实际用户表中。我创建了一个迁移AddTaxIdToUsers,它引用并向users表中添加了一个名为tax_id的列。

不过,我不知道如何将创建的税务记录的ID存储在用户表中。我想这是一种双向关系,但我不明白在我的has_many :taxes0函数中,我是如何与用户模型交互的。我想这会在after_save回调中完成吗?

在这种情况下,我是否还需要将belongs_to: tax添加到用户模型中?

我会有点不同。

在一对一关系中,您不需要belongs_to定义,而是需要has_one

在我看来,概念上正确的方法是:

user.rb:

has_one :tax

那么,你的方法就是

@user=User.find(..)
@user.build_tax(income: income, taxes: taxes, rrsp: rrsp)

基本上,我有两个模型。具有_many:tax和属于_to:user的税务模型的用户。在我的应用程序中,用户只能有一个税务记录

如果一个用户只能有一个税务记录,则不应使用has_many :taxes,而应改用has_one :tax。Rails将自动处理一切。

请参阅http://guides.rubyonrails.org/association_basics.html#the-有一个关联

然后你就不需要"过滤之前看看用户是否已经有了"。然而,你想确保用户在任何时候都有税务记录吗?你可以validates_presence_of :tax

请参阅http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i验证

如果使用嵌套形式,则可能根本不需要TaxesController

此外,如果您使用嵌套形式,您将使用accepts_nested_attributes,因此不再需要您的belongs_to: user0方法

请参阅http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

最新更新