0

Rails 3アプリケーションがあり、ページのデザインを変更するためにかなりの数の条件ステートメントを使用しています。このような大幅な量の条件文を持つためにロジックを視野に入れないようにするためのベストプラクティスは何ですか?

架空の例:

<% unless @ethos.blank? %>
 <%= unless @work.nil? do %>
  <%= link_to "Add Work", work_path %>
 <% end %>   
 <%= @ethos.tagline %>
<% end %>

他の条件の中にもっと多くの条件があります。1つのビュー内でこれを管理するための最良の方法は何ですか?

4

2 に答える 2

5

ビューでは、複雑な条件(およびほとんどの条件)を避ける必要があります。それらをヘルパー、またはさらに良いことに、ある種の「プレゼンター」に抽出して、それらの「グローバルな見た目/感じのヘルパー」の代わりにレシーバーで作業できるようにします

SomeHelper

module SomeHelper
  def work_link
    (@ethos.present? && @work) ? link_to("Add Work", work_path) : nil
  end
end

意見

<%= work_link %>
<%= @ethos.tagline if @ethos.present? %>

空の配列とは対照的@ethosである可能性が高い場合は、代わりに次を使用できます。nil[]

<%= @ethos.try :tagline  %>

また、元のビューでは、ではなく<%= unless @work.nil? do %>を使用する必要があることに注意してください。-=

ああ、ERBではなくHAMLを使用することをお勧めします。HAMLを使用すると、ビューは次のようになります(読みやすくなりますね):

= work_link %>
= @ethos. try :tagline

HAMLでは元のビューは次のようになります(ビューの条件はできるだけ避けてください!)

- unless @ethos.blank?
 - unless @work.nil? do
   = link_to "Add Work", work_path
 = @ethos.tagline
于 2012-07-07T18:04:27.993 に答える
1

コードが機能する場合、あなたの懸念は何ですか?それは美学ですか、それともネストが非常に多いためにコードが何をしているのかを推論するのに苦労していますか?

最も簡単な解決策は、おそらく条件文をインラインに移動することです。

<%= link_to("Add Work", work_path) if @ethos.present? && @work %>
<%= @ethos.tagline if @ethos.present? %>

これにより、読みやすさ(したがって保守性)が向上しますが、Railsの純粋主義者を満足させるには十分ではない可能性があります。Zabbaの答えは、ウサギの穴をさらに下るいくつかの素晴らしい選択肢を示しています。

于 2012-07-07T19:28:11.260 に答える