Rails / ActiveRecord – 我怎样才能使这更简洁?

在我看来,我有一行如下:

 

看起来我必须做很多这样的事情,因为有些字段可以为空。

有没有更好的方法来写这个?

我可以在模型层处理它,但根据我的理解,这并不能真正模拟层function。

你可以使用@house.person.try(:phone_number)

您可以使用活动记录支持的委托方法。

delegate :phone_number, :to => :person, :allow_nil => true

并直接打电话给@house.phone_number ,避开中间人。 如果手机是零,这也将返回零。

这些对Demeter类型问题的强烈建议当然可以通过在House包含Person的方法来包含在模型中,从而在过程中暴露更少的信息。

 def person_phone_number @person.phone_number || "" end 

有点笨重; 你也可以对它们进行元编程。

或者创建助手或两者的组合。 这是一个典型的问题,IMO将其包含在包含模型中没有任何问题。