rails用于访问相关模型属性的最佳实践

时间:2014-01-15 22:55:45

标签: ruby-on-rails design-patterns

是否有一种特定的模式或模式可供我研究以解决这种情况。

我正试图掌握访问相关模型属性的最佳方法,有时是相关模型。

一个简单的例子:

class Customer
 has_many :sites
end

class Site
 # Customer is not required
 belongs_to :customer
 has_many :slips
end

class Slip
 belongs_to :site
end

我有一份报告,显示有关特定单据的信息。 在该报告中,我想引用客户的全名,它是客户中复杂方法的几个字段的串联。

现在我认为最好不要做slip.site.customer.full_name:

1)模型之间的联系太紧,似乎我需要对扩展的关系了解太多,并使我的代码变得脆弱。 2)如果网站没有客户,我必须进行零测试。 3)使用2,我在哪里进行测试,当然最好在Site中使用像customer_full_name这样的方法,但如果只在Slip和Customer中使用它,那么将网站混乱似乎是错误的。

在这个示例中,我只有一个扩展关系,但如果我的门票也属于网站,我需要相同的信息。

最好创建一个单独的帮助器类,它接受参数来生成所需的输出?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用Rails的委托方法? http://apidock.com/rails/Module/delegate

在这种情况下......

# slip.rb
# ...

has_one   :customer, through: :site
delegate  :full_name, to: :customer, prefix: :customer, allow_nil: true

# ...

要从单据中获取关联客户的名字,请使用@slip.customer_first_name如果没有客户,则会返回nil