【问题标题】:How to make a link's path change each day如何每天更改链接的路径
【发布时间】:2018-09-14 03:56:14
【问题描述】:

我将在我的网站上发布每日锻炼。我想在导航栏中放置一个链接,上面写着“今天的锻炼”。我将事先创建锻炼,然后我希望链接的路径指向当天锻炼的显示页面。我从来没有做过这样的事情,所以我真的不知道这个过程。

我有一个专栏scheduled_on 作为我希望它发布的日期。有没有办法让链接的路径推送到scheduled_on 日期?

【问题讨论】:

  • 这是我的理论,不确定它是否适合您,您如何使用date 作为key 和value 作为link 创建一个哈希。然后将日期(键)与今天的日期进行比较,如果是今天,它将返回相应的link。您可以将其作为 cron 运行并在每 24 小时运行一次。
  • @KedarnagMukanahallipatna 嗯,我觉得这可能是不必要的。我在想<%= link_to_if Workout.scheduled_on == Date.today, "Today's Workout" %> 之类的东西。我已经尝试了其中一些变体,但我不断收到 **undefined method 'scheduled_on'`

标签: ruby-on-rails ruby-on-rails-5 link-to


【解决方案1】:

您可以使用以下代码轻松完成

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

【讨论】:

  • 感谢您的回复!我有&lt;%= link_to "Today's Workout", workout_path(id: Date.today) %&gt;,这似乎有效,因为我使用的是 FriendlyId 宝石,其中 slug 是锻炼的日期。您对此有何看法?
  • 感谢您的回复,如果对您有用,请提及我的回答。 Workout.friendly.find(params[:date]) 可以为你工作
【解决方案2】:

您可以创建一个辅助方法,该方法查找并返回所需的锻炼:

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

然后就可以在链接标签中调用helper方法了:

<%= link_to todays_workout, "Today's workout" %>

【讨论】:

    【解决方案3】:

    我会创建一个单独的路由并保持链接路径不变:

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

    我会创建一个单独的路由而不是拥有一个“动态”链接的原因是可以在反向代理中缓存响应以提高性能。并且在控制器中而不是在视图中具有今天的锻炼逻辑。

    【讨论】:

    • 感谢您的回复!我一直在寻求性能改进。
    • 我一直在使用 @max 的答案,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多