Elixir version
1.16.2
Database and Version
PostgreSQL 16.1
Ecto Versions
3.12.4
Database Adapter and Versions (postgrex, myxql, etc)
postgrex 0.19.1
Current behavior
I wanted to apply this :writable option mentioned in field/3' documentation. Unluckily writable: insert seems to be ignored.
Given this schema:
defmodule MyApp.Accounts.Account do
use Ecto.Schema
import Ecto.Changeset
schema "accounts" do
field :firebase_uid, :string, writable: :insert
field :deactivated_at, :utc_datetime
timestamps(type: :utc_datetime)
end
@doc false
def changeset(account, attrs) do
account
|> cast(attrs, [:firebase_uid, :deactivated_at])
|> validate_required([:firebase_uid])
end
end
This tests fails:
test "update_account/2 doesn't allow firebase_uid to change" do
account = account_fixture()
invalid_attrs = %{ firebase_uid: "another different uid" }
# this wont work
# assert {:error, %Ecto.Changeset{}} = Accounts.update_account(account, invalid_attrs)
# instead, these pass (???)
{:ok, account} = Accounts.update_account(account, invalid_attrs)
assert account.firebase_uid == "another different uid" # !!
end
Expected behavior
I'd expect the previous test to have the commented parts to pass, and the uncommented parts to fail, i.e. I'd expect this test to pass:
test "update_account/2 doesn't allow firebase_uid to change" do
account = account_fixture()
invalid_attrs = %{ firebase_uid: "another different uid" }
assert {:error, %Ecto.Changeset{}} = Accounts.update_account(account, invalid_attrs)
# or
# {:ok, account} = Accounts.update_account(account, invalid_attrs)
# assert account.firebase_uid != "another different uid"
end
(meaning: I'm not sure if the :insert option ignores the write or returns an error, but surely it shouldn't allow an edit!)
Elixir version
1.16.2
Database and Version
PostgreSQL 16.1
Ecto Versions
3.12.4
Database Adapter and Versions (postgrex, myxql, etc)
postgrex 0.19.1
Current behavior
I wanted to apply this
:writableoption mentioned in field/3' documentation. Unluckilywritable: insertseems to be ignored.Given this schema:
This tests fails:
Expected behavior
I'd expect the previous test to have the commented parts to pass, and the uncommented parts to fail, i.e. I'd expect this test to pass:
(meaning: I'm not sure if the
:insertoption ignores the write or returns an error, but surely it shouldn't allow an edit!)