Как я могу отображать только те записи, срок годности которых еще не истек (поле)? - PullRequest
0 голосов
/ 28 сентября 2011

В моем приложении я могу добавлять предложения и назначать им даты начала и окончания, предложения отображаются как частичные.Как я могу отображать их, только если начальная дата является сегодняшней или более ранней, а конечная дата еще не достигнута?

Пока у меня есть:

частичное предложение

  <% if offer.date_from > Date.today && offer.date_to < Date.today %>
    <div class="offer_partial">
      <div class="offer_title">
        <%= offer.title %>
      </div>

      <div class="offer_body">
        <%= offer.body %>
      </div>                 
    </div>
  <% end %>

Но это дает неопределенный метод `> 'для ошибки nil: NilClass.

Можно ли проводить подобные проверки в представлении?

Большое спасибо за любую помощь!

1 Ответ

4 голосов
/ 28 сентября 2011

Чтобы ответить на ваш второй вопрос в первую очередь, нет, вы должны построить коллекцию моделей предложений с помощью запроса в контроллере, таким образом, оставляя представление просто перебирать эту коллекцию и визуализировать HTML.

Кроме того, блок if не делает то, что вы хотите. Вы сказали «Сегодняшняя дата или раньше», но вы проверяете сегодняшнюю дату или позже. Кажется, вы перевернули логику.

Полученная ошибка означает, что date_from равно нулю. Вы проверяете эти поля или им разрешено иметь нулевое значение?

Вот как я бы настроил эту коллекцию:

class Offer < AR::Base
  scope :end_date_not_reached, where("date_from <= ?", Date.today).where("date_to > ?", Date.today)
end

В контроллере:

@offers_in_progress = Offer.end_date_not_reached

В виде:

<% @offers_in_progress.each do |offer| %>
  <!-- stuff here -->
<% end %>

Надеюсь, это поможет.

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