我现在有一个非常具体的困境。
给定以下模型:
class Message < ActiveRecord::Base
attr_accessible :body, :sent_at
belongs_to :subject
end
class Subject < ActiveRecord::Base
attr_accessible :title
has_many :messages
belongs_to :last_message, :class_name => 'Message', :foreign_key => 'last_message_id'
end
在一个视图中,我想遍历主题列表并显示: - 主题标题 - sent_at 主题的最后一条消息,如下所示:
<% @subjects.each do |subject| %>
<%= subject.title %>
<%= subject.last_message.sent_at %>
<% end %>
问题是:subject.last_message 有时可能为零。在这种情况下,上面的代码会抛出异常。
那么:最好的解决方案是什么?我可以看到 3 种可能性,但老实说,我不知道哪些被认为是好的或坏的。
1)让视图拯救它
<%= subject.last_message.sent_at rescue '' %>
2)做一个帮手
def last_message_sent_at(subject)
return '' if subject.last_message.blank?
subject.last_message.sent_at
end
<%= last_message_sent_at(subject) %>
3)在主题模型上制作一种“代理”
class Subject < ...
...
def last_message_sent_at
return '' if last_message.blank?
last_message.sent_at
end
end
<%= subject.last_message_sent_at %>
你会选择哪一个,为什么?或者还有其他我没有想到的方法?
/ 卡斯滕