Operations automatically know how to handle JSON params. They just need to be formatted in a way Avram knows how to handle.
Let’s say you have an operation called SaveArticle. Lucky will look for the data
nested under the article key. The key is derived from the model name.
We need to remember to add columns permit_columns {{column name}} or
the attribute will be ignored. In this case, add permit_columns title to
the SaveArticle to allow the title field to be saved. Learn more
about permitting columns to be saved with params.
class SaveArticle < Article::SaveOperation
permit_columns title
end
By default Avram will look for the params under the
articlekey. You can change the param key to anything you want though.
Then submit these params:
Remember to set the
Content-typeheader toapplication/jsonso Lucky knows that it should process the params as JSON.
{
"article": {
"title": "A new article"
}
}
And save it in an Action:
class Api::Articles::Create < ApiAction
post "/api/articles" do
article = SaveArticle.create!(params)
head HTTP::Status::Created
end
end
You’ll note that we use create! instead of create with a block. This
means that Avram will raise an error if the operation fails. This error
is handled by Errors::Show. By default Lucky handles invalid operations
with a nice JSON error message that includes what went wrong, and what param
caused the issue.
Learn more about this in the error handling guide