Establecer rango de fecha predeterminado a 1 semana, y luego tener el rango de fecha de entrada persiste mediante el envío [Ruby on Rails]

Estoy creando una aplicación de gráficos que muestra datos basados en un rango de fechas, y quiero tener el rango de fechas por defecto a un intervalo de 1 semana cuando la aplicación se abre por primera vez, y luego dar al usuario la opción de establecer el rango de fechas para buscar un rango más largo o más corto. Actualmente estoy fijando la fecha predeterminada a lo que fue la última fecha de entrada, por lo que una vez que se introduce una fecha, el rango persistirá hasta que se cambie de nuevo o hasta que vuelva a la página de inicio. Soy nuevo para Ruby en su conjunto, por lo que el medio ambiente es todavía un poco confuso, pero estoy pensando que sería el más lógico establecer los valores en el controlador, pero no estoy seguro de cómo hacerlo o si eso es incluso correcto. Hasta ahora, tengo esto:

index.html.erb (view)
Start Date <%= date_field_tag :start_date, params[:start_date], id:'start', class:'dateSel' %>
End Date <%= date_field_tag :end_date, params[:end_date], id:'end', class: 'dateSel' %>

welcome_controller.rb (controller)
start_date = params["start_date"]
end_date = params["end_date"]

Pregunta hecha hace 3 años, 4 meses, 27 días - Por debugdynamo05ee


4 Respuestas:

  • Simplemente podría agregar un retroceso a su vista:

    Start Date 
    <%= date_field_tag :start_date, params[:start_date] || 1.week.ago, id: 'start', class: 'dateSel' %>
    End Date 
    <%= date_field_tag :end_date, params[:end_date] || Date.today, id: 'end', class: 'dateSel' %>
    

    Respondida el Dec 18, 2020 a las 14:18 - por daniel1

    Votos positivos: 0 | Votos negativos: 0

  • Yo añadiría los params al link_to que vincula a la página. Algo como: link_to 'Chart', charts_path(start_date: (Date.today - 6.days), end_date: Date.today)

    En ese caso cuando vayas a la página siempre empezará en la semana pasada. Entonces no necesitas añadir nada más al controlador.

    Respondida el Dec 18, 2020 a las 14:24 - por bytebard

    Votos positivos: 0 | Votos negativos: 0

  • Para establecer un rango de fecha predeterminado a 1 semana al momento de abrir la aplicación por primera vez, puedes hacer lo siguiente en el controlador. Utilizaremos la gema 'date' de Ruby para manipular las fechas:

    ruby
    class WelcomeController < ApplicationController
      def index
        if params[:start_date].blank? || params[:end_date].blank?
          

    Si las fechas no están presentes en los parámetros, establece el rango predeterminado a 1 semana

    @start_date = Date.today - 6.days @end_date = Date.today else @start_date = Date.parse(params[:start_date]) @end_date = Date.parse(params[:end_date]) end end end

    Luego, en tu vista index.html.erb, puedes actualizar tu código para reflejar las fechas establecidas en el controlador:

    erb
    <%= form_tag({controller: "welcome", action: "index"}, method: "get") do %>
      Start Date <%= date_field_tag :start_date, @start_date, id: 'start', class: 'dateSel' %>
      End Date <%= date_field_tag :end_date, @end_date, id: 'end', class: 'dateSel' %>
      <%= submit_tag "Search" %>
    <% end %>
    

    En este código, cuando se carga la página por primera vez, establecerá el rango de fechas predeterminado a 1 semana antes de la fecha actual. Si el usuario selecciona una fecha personalizada y envía el formulario, esas fechas serán persistidas y utilizadas en el siguiente renderizado de la página.

    Es recomendable validar y manipular las fechas de manera adecuada en función de tus requerimientos específicos.

    Respondida el Dec 19, 2020 a las 14:16 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Necesitas establecer los valores predeterminados para start_date y end_date en el controlador. Puedes hacer esto agregando lo siguiente a tu controlador:

    ruby
    def index
      @start_date = params[:start_date] || 1.week.ago
      @end_date = params[:end_date] || Date.today
    end
    

    Esto establecerá @start_date a una semana antes de la fecha actual y @end_date a la fecha actual si no se proporcionan parámetros start_date y end_date en la solicitud.

    Luego, puedes usar @start_date y @end_date en tu vista para establecer los valores predeterminados para los campos de entrada de fecha:

    html
    <%= date_field_tag :start_date, @start_date, id:'start', class:'dateSel' %>
    <%= date_field_tag :end_date, @end_date, id:'end', class: 'dateSel' %>
    

    Esto garantizará que el rango de fechas predeterminado sea siempre una semana, a menos que el usuario ingrese un rango de fechas diferente.

    Respondida el Dec 19, 2020 a las 14:24 - por Gemini

    Votos positivos: 0 | Votos negativos: 0