Comments (11)
I saw the same behavior. cast "works" until you try to getting the scope. When I use cast_attachements, I get an error from Phoenix, no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata.
from arc_ecto.
Hi @knewter and @eric-roland
I am getting that error too.
Has anybody figured a workaround to this issue to make it works.
from arc_ecto.
Sorry guys!
I just saw these comments - No idea why they didn't come to my email. I am looking into this now.
from arc_ecto.
Can you post an example that you are having problems with?
I currently do not try to combine calls to cast
and cast_attachments
. This is how I currently use it:
def update(user, params) do
user
|> cast(params, ~w(), ~w(first_name last_name email))
|> cast_attachments(params, ~w(), ~w(avatar))
end
from arc_ecto.
@knewter Thanks for the Elixir Sips writeup! I'm going to have to check it out :)
from arc_ecto.
Hi @stavro,
I think the above update/2 function is a changeset/2 for the model's changeset function. If not please correct me.
def changeset(user,params) do
user
|> cast(params, ~w(), ~w(first_name last_name email))
|> cast_attachments(params, ~w(), ~w(avatar))
end
I tried using that for the defination of changeset/2 defination model I still get the error "unsupported dict: :empty" when creating a changeset in the function new of the controller
def new(conn, _params) do
changeset = Upload.changeset(%Upload{})
render conn, "new.html", changeset: changeset
end
My Upload model look like this -
defmodule BlogCswebInTh.Upload do
use BlogCswebInTh.Web, :model
use Arc.Ecto.Model
schema "uploads" do
field :title, :string
field :file, BlogCswebInTh.UploadFile.Type
timestamps
end
@required_fields ~w(title file)
@optional_fields ~w()
@doc """
Creates a changeset based on the `model` and `params`.
If no params are provided, an invalid changeset is returned
with no validation performed.
"""
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> cast_attachments(params, @required_fields, @optional_fields)
|> validate_length(:title, min: 1)
end
end
And my uploader look like this -
defmodule BlogCswebInTh.UploadFile do
use Arc.Definition
use Arc.Ecto.Definition
@versions [:original]
end
from arc_ecto.
@blisscs Two things:
- Separate out the fields you send to
cast
andcast_attachments
. Usecast
for all attributes other thanfile
, and usecast_attachments
for your file parameters. Right now you are specifying the same@required_fields
for both. - The library was not properly supporting a value of
:empty
as the params. Please upgrade yourarc_ecto
dependency to v0.1.2, try again, and let me know!
from arc_ecto.
I have seperated out the fields for the cast and cast_attachements the above changeset/2 function above and updated arc_ecto to v0.1.2
Please see code below.
def changeset(model, params \\ :empty) do
model
|> cast(params, ~w(title), ~w())
|> cast_attachments(params, ~w(file),~w() )
|> validate_length(:title, min: 1)
end
After doing so I got the error
undefined function: Ecto.Changeset.__changeset__/0
Thank you @stavro for your help in this.
from arc_ecto.
@blisscs Thank you for the feedback. I believe this is an issue in Ecto (Reported at: elixir-ecto/ecto#914)
If you want to get around the issue temporarily, replace the atom :empty
with an empty map (%{}
)
def changeset(model, params \\ %{}) do
model
|> cast(params, ~w(title), ~w())
|> cast_attachments(params, ~w(file),~w() )
|> validate_length(:title, min: 1)
end
from arc_ecto.
Usage of the :empty
atom has been fixed in Ecto master. Until the next released version, either reference git directly, or use an empty map (%{}
) instead of the :empty
atom.
If you notice any other issues please open a new issue.
Thanks!
from arc_ecto.
Thanks for the detailed answer, @stavro!
I'm just starting with Elixir/Phoenix and got the changeset/0 error above, nice to find all the answers I needed here :)
from arc_ecto.
Related Issues (20)
- 2 pictures in one schema HOT 1
- Ecto 3.0 emits warnings when using arc_ecto HOT 3
- arc_ecto not working with ecto 3 HOT 15
- Examples for saving arc photo from websocket? HOT 1
- Dialyzer error HOT 1
- Problem with Tests
- Support for signed Cloudfront web distributions.
- Specify Field Name In Scope
- Truncating updated_at broke my tests
- Cant get upload from frontend to work with Ecto 3 and arc_ecto in Phoenix API. HOT 1
- Uploading to S3 from a remote URL returns a SignatureDoesNotMatch error
- Fix Ecto 3.2 warnings HOT 3
- Adding or changing versions HOT 3
- Timout when transforming image HOT 1
- Upload via remote URL doesn't seem to work. HOT 1
- allow_urls feature to allow upload for valid URLs only HOT 1
- arc_ecto requires arc 0.8.0 HOT 1
- Error uploading to S3 with 0.10.0 HOT 2
- Microseconds in updated_at timestamp HOT 4
- Todo: Support Ecto 3 HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from arc_ecto.