Establecer un "caso" para "confirmar"

No estoy seguro si mi solución no es la mejor manera de resolver esto:

Mis usuarios son capaces de crear "casos". Después de un período de tiempo, debe haber una acción para dar vuelta a los casos que crean antes para confirmar.

Traté de resolver eso con la ruta "on: :member" como esta:

route.rb

  resources :cases do
    post 'confirm', on: :member
  end

Ahora quiero crear una acción en cases_controller, donde pongo un caso 'confirmed_at' a 'time.now'. ¿Pero cómo puedo hacer eso?

Aquí está mi schema.rb para casos

create_table "cases", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
    t.string "first_name"
    t.string "last_name"
    t.string "gender"
    t.date "birthdate"
    t.string "place_of_residence"
    t.string "diagnosis"
    t.bigint "user_id", null: false
    t.datetime "confirmed_at"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["user_id"], name: "index_cases_on_user_id"
  end

Pregunta hecha hace 3 años, 5 meses, 0 días - Por pixelprodigy50bb


3 Respuestas:

  • Si entiendo correctamente su pregunta entonces sólo añadir en CasesController:

    def confirm
      Case.where(id: params[:id]).update!(confirmed_at: Time.now)
      # add here whatever you want to return to the caller
    end
    

    Y entonces puedes acceder a esto haciendo un POST solicitud .../cases/:id/confirm

    Respondida el Dec 16, 2020 a las 10:37 - por binaryblossom

    Votos positivos: 0 | Votos negativos: 0

  • Para implementar la acción de confirmar un caso en tu controlador cases_controller, primero debes definir la acción confirm que se ejecutará cuando se haga una solicitud POST a la ruta confirm del caso en cuestión. Aquí te dejo un ejemplo de cómo podrías hacerlo:

    En tu archivo cases_controller.rb, agrega el siguiente código dentro de la clase CasesController:

    ruby
    def confirm
      @case = Case.find(params[:id])
      @case.update(confirmed_at: Time.now)
      redirect_to @case, notice: 'Caso confirmado exitosamente.'
    end
    

    En este código, primero se encuentra el caso específico que se está confirmando, se actualiza el atributo confirmed_at con la fecha y hora actuales y finalmente se redirige a la vista del caso con un mensaje de confirmación.

    Recuerda que debes tener la ruta definida en tu archivo routes.rb de la siguiente manera:

    ruby
    resources :cases do
      post 'confirm', on: :member
    end
    

    Una vez que hayas definido esto en tu controlador y en tus rutas, podrás confirmar un caso al acceder a la URL cases/:id/confirm mediante una solicitud POST.

    Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 17, 2020 a las 10:32 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes crear una acción en cases_controller para confirmar casos estableciendo el valor de confirmed_at a Time.now de la siguiente manera:

    ruby
    

    app/controllers/cases_controller.rb

    class CasesController < ApplicationController def confirm @case = Case.find(params[:id]) @case.update(confirmed_at: Time.now) redirect_to cases_path, notice: "Caso confirmado correctamente." end end

    En esta acción:

    • Usamos `find(params[:id])` para recuperar el caso que se va a confirmar.
    • Establecemos `confirmed_at` en el caso actual a `Time.now`.
    • Guardamos los cambios en la base de datos usando `update`.
    • Redirigimos al usuario a la página de casos (`cases_path`) con un mensaje de confirmación.

    También es importante asegurarte de que tienes una ruta para la acción confirm:

    ruby
    

    config/routes.rb

    resources :cases do post 'confirm', on: :member end

    Una vez que hayas creado la acción y la ruta, puedes acceder a la acción confirm visitando la URL /cases/:id/confirm para el caso que deseas confirmar. Esto establecerá el valor confirmed_at a la hora actual y mostrará el mensaje de confirmación.

    Respondida el Dec 17, 2020 a las 10:46 - por Gemini

    Votos positivos: 0 | Votos negativos: 0