我创建了一些rails应用程序,有些是生产,有些只是为了好玩。现在我想创建一个有点复杂的应用程序,并且会大量使用连接。
模型中rails的当前方法是自动生成model.id,model.created_at和model.updated_at属性。
这很好,但为了避免加入地狱,那些以模型名称为前缀的字段会不会更好?像这样:
Company:
- com_id
- com_name
- com_created_at
- com_updated_at
Order:
- ord_id
- ord_com_id
- ord_price_group
- ord_created_at
- ord_updated_at
Product:
- pro_id
- pro_code
- pro_name
- pro_price_def_cents
- pro_price_pre_cents
- pro_price_res_cents
OrderItem:
- ori_id
- ori_ord_id
- ori_pro_id
- ori_code
- ori_name
- ori_price_cents
- ori_created_at
- ori_updated_at
通过这种方式,您可以加入所有模型而无需命名问题:
OrderItem:
ori.ori_id: 19785,
ori.ord_id: 87450,
ori.ord.com_id: 145,
ori.ord.com.com_name: "Acme",
ori.ord.com.com_created_at: 1970-01-01 00:00:00,
ori.ord.com.com_updated_at: 1970-01-01 00:00:00,
ori.ord.ord_price_group: "res",
ori.ord.ord_created_at: 2015-12-31 14:56:01,
ori.ord.ord_updated_at: 2016-01-31 01:00:00,
ori.ori_pro_id: 1780,
ori.pro.pro_code: "pap-pla-80",
ori.pro.pro_name: "Paper, plain, 80g",
ori.pro.pro_price_def_cents: 16999,
ori.pro.pro_price_pre_cents: 15999,
ori.pro.pro_price_res_cents: 14999,
ori.pro.pro_created_at: 1970-01-01 00:00:00,
ori.pro.pro_updated_at: 1970-01-01 00:00:00,
ori.ori_code: nil,
ori.ori_name: nil,
ori.ori_price_cents: 14999,
ori.ori_updated_at: 2016-01-30 04:00:00,
ori.ori_updated_at: 2016-01-30 15:00:00
这样你就可以使用所有属性“flattened”,并且永远不必担心属性,以防你只需要切换方向(你看一下那个特定的OrderItem,或者你想要订单包括OrderItems和Company,或者只是想要了解特定公司的所有订单和OrderItem。无论您加入什么方式,属性都保持不变,因此您可以使用完全相同的部分/ order_item,/ order - > items,/ product - > orders - &gt ; items,/ company - > orders - > items - > products etc.。
问题是:这是一个好方法吗?它在Rails中可行吗?当我们跟踪我们自己的客户订单时,如何解决问题,但是跟踪客户(公司)与其客户(公司)之间的订单? rails可以动态地为属性添加前缀以防止歧义吗?或者你只需要为每种可能的场景写一个单独的视图吗?
答案 0 :(得分:0)
最好不要单独留下列名。在大多数情况下,您使用ActiveRecord,例如:
Company.join(:产物).includes(:订单)
(Totes组成,可能不起作用。至少它需要在模型上适当的has_many / belongs_to等)
当你访问各种属性时,事情就会起作用。你不需要做前缀,你也不会加入地狱,因为ActiveRecord会为你照顾它。如果你看一下生成的查询,就会加入地狱,但这就是ActiveRecord的问题。
tl; dr:没有前缀,如果让Rails处理它,Rails会正确处理它。