两个 ruby 模型。 has_one,以及 belongs_to。为什么要有两个模型?

Two ruby models. has_one, and belongs_to. Why have two models at all?

我正在构建一个目前有两个模型的应用程序:用户和收入。每个用户都有一份收入,而且只有一份收入。每个收入都必须属于一个用户。

创建用户时,他们的收入也会创建。没有分配用户就不应该有收入创造;如上所述,每个用户只有一份收入和一份收入。

在这种情况下,为什么要有一个单独的收入 MVC?到目前为止,我已经按照我所理解的最佳做法将每个操作分开,但我现在读到从用户控制器调用收入操作是禁忌。示例:如果用户注册成功,则从用户控制器创建收入。

通过删除收入 MVC 并将这些操作和列放在用户 MVC 中,我有什么限制?我仍然需要添加管理员用户身份,因为只有管理员才能创建、删除和索引所有收入和用户。管理员将没有收入数据。

我觉得我会割掉我的鼻子来伤害我的脸

仅编码 3.5 个月。

通常有一个模型的原因是因为它与数据库中的一个table有关。您可以拥有只是 ruby 个对象的模型(PORO:普通旧 Ruby 个对象)。当我想创建混合其他事物的视图时,我就这样做了。

您需要单独的 table 吗?这才是真正的问题。如果用户的收入 table 不会破坏规范化(Database Normalization),那么就去做吧。如果收入中的唯一列是 :income(除了 :created_at、:updated_at),那么似乎没有理由单独使用 table。如果要存储有关 Income 的信息,请保留其 table。即收入来源、调整(寿命等)、开始日期、结束日期、每小时等。

如果您保留 table,您可能希望定义关系。

def User < ActiveRecord::Base
  has_one :income
  accepts_nested_attributes_for :income

...

def Income < ActiveRecord::Base
  belong_to :user
  dependent: :destroy

这样您就可以在用户表单中接受收入的属性,并且用户控制器可以构建和更新用户的收入。这在 Rails 中很常见。这些关系使您能够执行以下操作: (假设收入 table 有一个 yearly 列)

@user.income.yearly.number_to_currency
  =>',000.00'

@user.income = 55,000.00
@user.save

SQL (7.4ms)  UPDATE "incomes" SET "yearly" = , "updated_at" =  WHERE "incomes"."id" = 1  [["yearly", "50,000.00"], ["updated_at", Sat, 14 Mar 2015 13:43:37 PDT -07:00]]

(75.9 毫秒)提交 => 真

这是 Rails 中非常常见的模式,不会破坏 MVC。