acrolink
I have a special need to set the id of newly created entities to some integer relating to UNIX timestamp (not autoincrement based). Any idea how to do this? i am using Phoenix 1.3. Thank you.
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
How do I tell Hologram not to escape HTML when substituting into templates?
{Textile.render(@product.long_description)}
escapes the HTM...
New
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used?
I’ve got two Github accoun...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
Hi everyone :waving_hand:
I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #code-sync
- #discussion
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #elixirconf-us
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #security
- #elixirconf-eu
- #api
- #forms
- #performance










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
idi527
Are you asking about ecto or elixir’s structs?
With structs you can add something like a
newfunction to return them somewhat prepopulatedAnd you can use
@primary_keyattribute to configure the schema’s primary key.acrolink
I have tried your code but it fails.
defstruct ..gives an errordefstruct has already been called for Entre.Warehouse.Item, defstruct can only be called once per moduleand if I omit that line and keep thedef new(name) doblock I getEntre.Warehouse.Item.__struct__/1 is undefined, cannot expand struct Entre.Warehouse.Item.I am using Phoenix 1.3. I am not sure if the errors I get are related to the newly introduced contexts.
idi527
Sorry, I’ve probably confused you …
The example with
defstructthat I’ve provided seems to not be what you want. I just wondered if you were asking about ecto or elixir structs.Judging by the error you get, you were asking about ecto.
To get custom ids you should use
@primary_key.tomconroy
Try doing it with a Postgres function, like this
http://rob.conery.io/2014/05/28/a-better-id-generator-for-postgresql/
voger
@idi527: Sorry, I accidentally hit reply in your post. This reply was meant for the original post.
If your question is about how to do custom primary keys with Ecto then here is a guide in phoenix blog
http://phoenixframework.org/blog/custom-primary-key
acrolink
I am going to use the
idfield itself but instead of having auto-generated serial values I want to set Unix timestamps asids. I am usingEcto. I understand that the place to set the value is inside the model definition file but still cannot figure out the way to do that. ThePostgressolution can do the job, but I am interested in knowing how to do that in Phoenix. Any help is highly appreciated. Thank you.voger
In the blog post that I linked it says how to edit the migration
If I am not mistaken there is nothing stopping you from naming your primary key “id”. I haven’t tried naming a custom primary key “id”. You have to experiment a bit with this :).
Also if you look in the
add/3documentation you will see it can take the option:defaultSo you can use that to apply the Postgres function.
acrolink
@voger
I am just looking at the whole thing from a RoR background. There I could just do
Here it looks like the more professional way to do this is inside the schema definition and possibly by PostgreSQL itself. My little question in the meantime,
self.id = nand that’s allfragment/1uses a PostgreSQL function/procedure or can it consume a value returned from anElixirfunction?voger
Fragment runs SQL code/functions as prepared statements. You can use it if you want to use a custom Postgresql function to handle your ID generation inside the database. Here is an example about using fragments in Ecto: Fragments in Ecto – Learning Elixir
If you wan’t to handle ID generation with an Elixir function you don’t need a fragment. You can use put_change/3 in your changeset in your schema when you create it.
Another option is, if you want to make your code cleaner, you can use a custom ecto type as your field and define an autogenerate/0 function. This way you will still be generating your code with Elixir but you will be able to use that type of field in different structs. Here is an example of using uuids for primary key https://blog.fourk.io/uuids-as-primary-keys-in-phoenix-with-ecto-and-elixir-1dd79e1ecc2e. This example looks a bit like what you are trying to achieve. Also here is the code for the UUID type. Notice how it defines an
autogenerate/0function that just callsgenerate/0.Disclaimer: I haven’t actually had the chance to use a custom field.
acrolink
@voger
Thank you for the valuable information. I have tried to use the
put_change/3insidedef changeset(%Item{} = item, attrs) do. It works sort of. It sets the value at the time the form is rendered, not when the entity is saved to the database. In my situation, the value is time related so it should reflect the time when an entity is saved.I guess, first and 3rd solutions you described can help me achieve the desired result. I have considered setting the value inside the create function. I am not sure if that’s a proper way to do it. I am not sure even how that can be done.
UPDATE
I have just realized that setting the
idin the controller is not possible, it must be done either in DB, by custom data-type as suggested by @voger or by some other model way.