Как вы проверяете URL-параметр в операторе if? - PullRequest
0 голосов
/ 05 июня 2019

Я бы хотел проверить параметр url в операторе if, но я не знаю правильный синтаксис или возможно ли это вообще.

пока я получил

<% if param(order: :top) %>
<% elsif param(order: :top && live: :true) %>

оба из которых я знаю, неправильно.

Параметры URL, которые я пытаюсь проверить:

www.url.com /? Live = true & order = top

или

www.url.com /? = Порядок сверху

index.html.erb

<% current_user.following_channels.each do |c| %>
<% if param(order: :top) %>
<% c.discussions.where('created_at > ?', 1.days.ago).each do |discussion| %>
<% elsif param(order: :top && live: :true) %>
<% c.discussions.where('live = ?', true).each do |discussion| %>
<% end %>
    Some more code...
<% end %>

Ответы [ 2 ]

0 голосов
/ 05 июня 2019
params["live"].nil? #this will return false if there is no url parameter called "live"

params["live"].blank? # this will return false if url parameter live is blank

Итак, для других параметров. Как сказал CAmador, вам нужно перемещать свои коды в основном в контроллер (в этом случае при работе с параметрами код должен идти в контроллер).

0 голосов
/ 05 июня 2019

Ваш код, в любом случае, не имеет особого смысла для меня:

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 %>

Таким образом, представление ничего не знает о том, как получить данные, оно просто представляет их пользователю.

Вы все еще можете перемещать логику с контроллера на модели, но сначала освоитесь со всем этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...