Quiero usar una base de datos / tabla Rails MySQL antigua sin cambiarla con una nueva aplicación Elixir. Obviamente me encuentro con el problema created_at y inserted_at. https://hexdocs.pm/ecto/Ecto.Schema.html#timestamps/ 1 dice que puedo resolverlo. Pero no puedo hacer que funcione.

Esto es lo que hago:

mix phoenix.new address_book --database mysql
cd address_book
mix phoenix.gen.html User users first_name last_name
mix phoenix.server

web / modelos / user.ex

defmodule AddressBook.User do
  use AddressBook.Web, :model

  schema "users" do
    field :first_name, :string
    field :last_name, :string

    timestamps([{:created_at,:updated_at}])
  end
[...]

Pero de lo que me sale el siguiente error:

Screenshot

¿Cómo puedo arreglar esto?

3
wintermeyer 19 ago. 2016 a las 14:07

2 respuestas

La mejor respuesta

No está llamando a la función de marcas de tiempo con el argumento correcto. Toma opciones, por lo que debería ser:

timestamps(inserted_at: :created_at)

O:

timestamps([{inserted_at: :created_at}])

Estas llamando:

timestamps(created_at: :updated_at)

Dado que no hay verificación para la opción created_at, esto no cambia las marcas de tiempo que se utilizan.

Puede configurar esto para todos sus esquemas usando:

  @timestamps_opts inserted_at: :created_at

En su archivo web.ex (en la sección de esquema).

5
Gazler 19 ago. 2016 a las 11:22

Además de la respuesta anterior, la mejor manera de establecer esto en un contexto es:

defmodule MyApp.Schema do
  defmacro __using__(_) do
    quote do
      use Ecto.Schema
      @timestamps_opts inserted_at: :created_at
    end
  end
end

Entonces, en lugar de tener que definir eso en cada esquema, puede simplemente use MyApp.Schema.

Utilizo este patrón en mi aplicación phoenix que usa un esquema db coexistente generado por rieles.

https://hexdocs.pm/ecto/Ecto.Schema.html

1
Kevin Brown 10 oct. 2018 a las 14:44