私は今、非常に具体的なジレンマを抱えています。
次のモデルが与えられます:
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がnilになる場合があるということです。その場合、上記のコードは例外をスローします。
だから:これに対する最良の解決策は何ですか?私は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 %>
どちらを選びますか、そしてその理由は何ですか?それとも、私が考えていなかった別の方法がありますか?
/カルステン