首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个红宝石模型。has_one和belongs_to。为什么有两个模特?

两个红宝石模型。has_one和belongs_to。为什么有两个模特?
EN

Stack Overflow用户
提问于 2015-03-14 14:37:30
回答 1查看 65关注 0票数 0

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

当用户被创建时,他们的收入也是如此。在没有指定用户的情况下,不应该创造收入;如上所述,每个用户只有一种收入和一种收入。

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

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

我觉得我会割伤我的鼻子来报复我的脸

只编码3.5个月。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-14 20:49:01

通常,建立一个模型的原因是因为它与DB中的一个表有关。您可以拥有仅仅是红宝石对象的模型(PORO:普通的旧ruby对象)。当我想要创建合并了其他事物的视图时,我已经这样做了。

你需要一张单独的桌子吗?这才是真正的问题。如果用户表中的收入没有破坏规范化(数据库规范化),那么就去做吧。如果收入中的唯一一列是:income ( :created_at,:updated_at除外),那么似乎没有理由有一个单独的表。如果您想存储有关收入的信息,那么保留它的表。即收入来源、调整(寿命等)、开始日期、结束日期、小时等。

如果保留表,则需要定义关系。

代码语言:javascript
复制
def User < ActiveRecord::Base
  has_one :income
  accepts_nested_attributes_for :income

..。

代码语言:javascript
复制
def Income < ActiveRecord::Base
  belong_to :user
  dependent: :destroy

通过这种方式,您可以接受用户表单中的收入属性,用户控制器可以构建和更新用户的收入。这在Rails中很常见。这些关系为您提供了这样的能力:(假设收入表有yearly列)

代码语言:javascript
复制
@user.income.yearly.number_to_currency
  =>'$50,000.00'

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

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

(75.9ms)提交=> true

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29050128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档