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将其包含在包含模型中没有任何问题。