我正在构建一个应用程序,目前有两个模型:用户和收入。每个用户都有一个收入,只有一个收入。每一项收入都必须属于用户。
当用户被创建时,他们的收入也是如此。在没有指定用户的情况下,不应该创造收入;如上所述,每个用户只有一种收入和一种收入。
在这种情况下,为什么有一个单独的收入MVC在所有的?到目前为止,我已经将每个操作分离开来,因为我认为每个操作都是最佳实践,但我现在读到,从用户控制器调用收入操作是禁忌。示例:如果用户注册成功,则从用户控制器中创建收入。
删除收入MVC并将这些操作和列放在用户MVC中有什么限制呢?我仍然需要添加管理用户的工具,因为只有管理员才能创建、删除和索引所有收入和用户。管理员将没有收入数据。
我觉得我会割伤我的鼻子来报复我的脸
只编码3.5个月。
发布于 2015-03-14 20:49:01
通常,建立一个模型的原因是因为它与DB中的一个表有关。您可以拥有仅仅是红宝石对象的模型(PORO:普通的旧ruby对象)。当我想要创建合并了其他事物的视图时,我已经这样做了。
你需要一张单独的桌子吗?这才是真正的问题。如果用户表中的收入没有破坏规范化(数据库规范化),那么就去做吧。如果收入中的唯一一列是:income ( :created_at,:updated_at除外),那么似乎没有理由有一个单独的表。如果您想存储有关收入的信息,那么保留它的表。即收入来源、调整(寿命等)、开始日期、结束日期、小时等。
如果保留表,则需要定义关系。
def User < ActiveRecord::Base
has_one :income
accepts_nested_attributes_for :income..。
def Income < ActiveRecord::Base
belong_to :user
dependent: :destroy通过这种方式,您可以接受用户表单中的收入属性,用户控制器可以构建和更新用户的收入。这在Rails中很常见。这些关系为您提供了这样的能力:(假设收入表有yearly列)
@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。
https://stackoverflow.com/questions/29050128
复制相似问题