現在、Ruby on Rails を使って開発をしております。
聞きたいこと
View と helper(pertial)で表示のための条件分岐を
ヘルパーメソッドやパーシャルで内包するかどうかよく迷うので、
みなさんがどのように記述しているのかを知りたいです。
たとえば、以下のような2つのパターンがあるとします。
[パターン1]
View 側でログインチェックをするパターンです。
<!-- index.html.erb --> <% if current_user %> <%= like_badge(current_user) %> <% end %>
Ruby
1# users_helper.rb 2def like_badge(user) 3 count = user.likes.count 4 return if count == 0 5 6 content_tag(:div, count, class: "badge") 7end
[パターン2]
ログインチェックをヘルパーメソッドに内包するパターンです。
<!-- index.html.erb --> <%= like_badge(current_user) %>
Ruby
1# users_helper.rb 2def like_badge(user) 3 return unless user 4 count = user.likes.count 5 return if count == 0 6 7 content_tag(:div, count, class: "badge") 8end
※実際には Decorator パターンで記述すると思います
2つのパターンのメリット・デメリット
2つのパターンにおけるメリット・デメリットを自分なりに考えてみました。
[パターン1の場合]
パターン1の場合は、helper(場合によっては pertial)の呼び出しのためのオーバーヘッドがないのと、
View を見ただけでログインしていない場合は、表示されないことがわかりやすい。
また、View でログインチェックを忘れてしまうとエラーになってしまう可能性がある。
ただ、別の場所から呼び出す場合も毎回 View でログインチェックしなければならない。
[パターン2の場合]
パターン2の場合は、ログインチェックを View でしなくていいので、View の記述がシンプルになる。
ただ、helper(場合によっては pertial)の呼び出しのオーバーヘッドがあるのと、
View からログインしていない場合は、どうなるのかがヘルパーメソッドのコードを見るまでわからない。
さいごに
今回は例のために helper のなかで content_tag
を呼び出していますが、
pertial を helper 内で render
したほうが View とロジックが分離してわかりやすいかと思います。
みなさんはどのようなパターンで記述されていますか?
理由も含めてご回答いただけると幸いです。
あなたの回答
tips
プレビュー