是否有一种特定的模式或模式可供我研究以解决这种情况。
我正试图掌握访问相关模型属性的最佳方法,有时是相关模型。
一个简单的例子:
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中使用它,那么将网站混乱似乎是错误的。
在这个示例中,我只有一个扩展关系,但如果我的门票也属于网站,我需要相同的信息。
最好创建一个单独的帮助器类,它接受参数来生成所需的输出?
答案 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
。