我将在我的网站上发布日常锻炼。我想在导航栏中放置一个类似“今天的锻炼”之类的链接。我将预先创建锻炼,然后我希望链接的路径成为当前锻炼的显示页面。我从来没有做过这样的事情,所以我真的不知道这个过程。
我有一列scheduled_on
作为我希望其发布的日期。有没有办法将链接的路径推送到scheduled_on
日期?
答案 0 :(得分:1)
您可以创建一个辅助方法,该方法可以找到并返回所需的锻炼:
def todays_workout
Workout.find_by_scheduled_on(Date.today.to_s).url
end
然后您可以在链接标记中调用helper方法:
<%= link_to todays_workout, "Today's workout" %>
答案 1 :(得分:1)
我将创建一条单独的路由并保持链接路径不变:
# 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 %>
我创建一个单独的路由而不是拥有“动态”链接的原因是可能将响应缓存在反向代理中以提高性能。并具有今天在控制器中而不是在视图中进行锻炼的逻辑。