Ваш код, в любом случае, не имеет особого смысла для меня:
if params[:order] == 'top'
if params[:live] == 'true'
c.discussions.where(live: true).each do |discussion|
.
.
.
end
else
c.discussions.where('created_at > ?', 1.days.ago).each do |discussion|
.
.
.
end
end
end
Кроме того, изучая Rails, вы должны перенести всю эту логику на контроллер и модель.
РЕДАКТИРОВАТЬ: перемещение логики на контроллер ( непроверенный код , может произойти сбой):
def index
@channels = current_user.following_channels.includes(:discussions)
@channels = @channels.where('discussions.created_at > ?', 1.days.ago) if params[:order] == 'top'
@channels = @channels.where(discussions: {live: true}) if params[:live] == 'true'
end
end
index.html.erb:
<% @channels.each do |channel| %>
<div class="channel-container">
<h2><%= channel.name %></h2>
<ul>
<% channel.discussions.each |discussion| %>
<li><%= discussion.text %></li>
<% end %>
</ul>
</div>
<% end %>
Таким образом, представление ничего не знает о том, как получить данные, оно просто представляет их пользователю.
Вы все еще можете перемещать логику с контроллера на модели, но сначала освоитесь со всем этим.