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> 

Я думал о вводе логики в частичной, но это не кажется очень эффективным, так как текст, который я хочу render - это просто предложение.

ответ

2

Вы можете добавить методы перевода в помощник вида.

def strong(comment_count) 
    case ... 
end 

Тогда ваш взгляд будет выглядеть следующим образом:

<%= strong(@comment_count) %> 

И ваш контроллер будет выглядеть следующим образом:

@comment_count = @user.comments.count 

Это хорошо, потому что контроллер не будет иметь никакой логики отображения и тому просмотр также будет коротким.

+0

Спасибо Фиона! Мало того, что это обеспечило ответ, который я искал, но вы также показали мне, как использовать помощника! Теперь это выглядит намного лучше! Спасибо. Наслаждайся своей жизнью! – jaqbyte

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) } %> 
+0

Привет, Андрей, спасибо за ваш ответ. Это хороший способ, но мне пока не нравятся символы. Но ваш ответ показал мне, как их использовать. Спасибо!!! – jaqbyte

Смежные вопросы