0

コメントの数に基づいて異なるテキストを表示する必要があり、ロジックをコントローラーに配置しました。しかし、コントローラーに長いメソッドがあると、あまり乾燥していないように見えます。代わりにどこに配置すればよいですか?

example_controller.rb:

def index
  .
  count_dependent_message
  .
end

def count_dependent_message
  case @user.comment.count
        when 0
          @strong = "example Strong 0"
          @paragraph = "example paragraph 0"
        when 1
          @strong = "Jon Smith is called Smith"
          @paragraph = "example paragraph 1"
        when 2...10
          @strong = "Once upon a time...Steve Jobs... "
          @paragraph = "example paragraph 2"
        when 11...40
          @strong = "Wow you have many counts"
          @paragraph = "example paragraph 3"

        else
          @strong = "exciting"
          @paragraph = "example paragraph 4"  
  end
end

見る:

<h3>
 <strong>
  <%= @strong %>
 </strong>
</h3>
<p>
<%= @paragraph %>
</p>

ロジックを部分的に配置することを考えましたが、レンダリングしたいテキストは単なる文であるため、あまり効率的ではないようです。

4

2 に答える 2

2

翻訳メソッドをビュー ヘルパーに追加できます。

def strong(comment_count)
   case ...
end

次に、ビューは次のようになります。

<%= strong(@comment_count) %>

コントローラーは次のようになります。

@comment_count = @user.comments.count

コントローラーには表示ロジックがなく、ビューも短くなるため、これは便利です。

于 2012-12-15T02:31:04.580 に答える
0

ビューのコードを部分的に移動します。例: _heading.html.erb

<h3>
 <strong><%= texts[:heading] %></strong>
</h3>
<p><%= texts[:text] %></p>

そして count_dependent_message メソッドは

    def count_dependent_message(count = nil)
      case count
      when 0
        { :heading => "example Strong 0", :text => "example paragraph 0" }
      when 1
        { :heading => "Jon Smith is called Smith", :text => "example paragraph 1" }
      when 2...10
        { :heading => "Once upon a time...Steve Jobs... ", :text => "example paragraph 2" }
      when 11...40
        { :heading => "Wow you have many counts", :text => "example paragraph 3" }
      else
        { :heading => "exciting", :text => "example paragraph 4" }
      end
    end

したがって、呼び出すことができます

<%= render 'heading', :locals => { :texts => count_dependent_message(@user.comment.count) } %>
于 2012-12-15T00:13:13.393 に答える