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

时间:2011-10-17 04:15:03

标签: ruby-on-rails ruby

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

<%= @house.person.phone_number unless @house.person.nil?  %>

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

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

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

3 个答案:

答案 0 :(得分:5)

您可以使用有效记录支持的delegate方法。

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

直接致电@house.phone_number,避开person中间人。如果手机为零,则也会返回零。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

通过在Person中包含House的方法,可以在模型中包含这些Strongly-Worded Suggestion of Demeter类型的问题,从而在流程中公开更少的信息。

def person_phone_number
    @person.phone_number || ""
end

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

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