Как сделать так, чтобы путь ссылки менялся каждый день - PullRequest
0 голосов
/ 14 сентября 2018

Я собираюсь публиковать ежедневные тренировки на моем сайте. Я хочу поместить ссылку на панель навигации, которая говорит что-то вроде «Сегодняшняя тренировка». Я буду создавать тренировки заранее, а затем я хотел, чтобы путь ссылки был на страницу показа тренировки текущего дня. Я никогда не делал ничего подобного, поэтому я не знаю, как это происходит.

У меня есть столбец scheduled_on в качестве даты, когда я хочу, чтобы она была опубликована. Есть ли способ заставить путь ссылки перейти на scheduled_on дату?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вы можете сделать это легко, используя приведенный ниже код

<% workout = Workout.where(scheduled_on: Date.today).first %>
<%= link_to_if(workout.scheduled_on == Date.today, "Today's Workout", Workout.find_by_id(workout.id) )  %>
0 голосов
/ 14 сентября 2018

Я бы создал отдельный маршрут и сохранил константу пути ссылки:

# routes.rb
resources :workouts do
  get :todays, on: :collection
end


# app/controllers/workouts_controller.rb
class WorkoutsController < ApplicationController
  # ...
  def todays
    @workout = Workout.where(scheduled_on: Date.today).first
    # you can choose between redirecting 
    redirect_to @workout
    # or rendering
    render :show  
  end
end

# in the view
<%= link_to 'Latest Workout', todays_workouts_path %> 

Причина, по которой я бы создал отдельный маршрут вместо "динамической" ссылки, заключается в возможности кэширования ответа в обратном прокси-сервере.для исполнения.И имея логику сегодняшней тренировки в контроллере, а не в представлении.

0 голосов
/ 14 сентября 2018

Вы можете создать вспомогательный метод, который находит и возвращает желаемую тренировку:

def todays_workout
    Workout.find_by_scheduled_on(Date.today.to_s).url
end

Затем вы можете вызвать вспомогательный метод в теге ссылки:

<%= link_to todays_workout, "Today's workout" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...