I have already created some models and controllers using mix phx.gen.html. I need to serve context as json. My question, should I create new controllers to serve json or is it better to modify current controllers to serve html/json depending on request type?
How to create new json controllers for existing models, what is the Pheonix / Mix way to do it?
And, inside say an index method, how to check request type and serve html/json accordingly? Thanks.
It’s one of these things that are nice in theory, but rarely work well in practice.
I would highly recommend separating your HTML-rendering controllers from API serving JSON. In my experience it usually becomes tiresome to maintain those two versions, as the HTML version will more than likely pull in more/different data than JSON version as time passes.
The problem with --no-schema is that (atleast as far as I’ve seen) the generated view files are empty (i.e: I have to go into the heex templates and manually add in the fields).
There doesn’t happen to be some kind of --no-migration option, is there? When the generator creates migration files, the migration files are somehow cached in ecto which requires cleaning the build to get things working again.
Update:
Ah, I see that the migration file is also copied to _build/your_app/priv/repo/migrations - so you have to delete the migration both from _build and project-root/priv in order for ecto to stop trying to run it.
It’d be nice if there was an option to turn off the migration file generation though. It exists on phx.gen.schema, but not on html or json