How do you increase Characters in a text box?

Hello,

I am working on a new application with Elixir, Dish_out. I have run into a few minor problems that I am trying to figure out.

  1. My text box for the summary only allows for a certain amount of characters. How can I increase the number of characters inside the text box and also the text box itself? Here is my attempt at this
schema "delish_foods" do
    field :date, :integer
    field :ingredients, :string
    field :summary, :string
    field :title, :string

    timestamps()
  end

   alter table(:delish_foods) do 
    modify :content, :text
   end
end
  1. is there a way to format the date input to add / or - to make it look cleaner rather than just numbers? perhaps a time/date library.
  1. Some possible things to consider:
  • Do you have a validation that is restricting it? i.e. validate_length(:summary, max: 250)
  • Are you using something like the html helper textarea/3 from the docs for your input field?
  • If you share more of your code it would help people see what’s going on.
  1. There are libraries like Timex which have multiple format options. There’s also strftime/3 from Elixir’s Calendar module.

I upload the code files on gitHub it is free to view

in your first bullet point you said if I am restricting anything

defmodule DishOut.Foods.Food do
  use Ecto.Schema
  import Ecto.Changeset

  schema "delish_foods" do
    field :date, :integer
    field :ingredients, :string
    field :summary, :string
    field :title, :string

    timestamps()
  end

  # alter table(:delish_foods) do 
  #   modify :content, :text
  # end
# The alter table I am increasing my char count to string over 255 for summary
  @doc false
  def changeset(food, attrs) do
    food
    |> cast(attrs, [:title, :ingredients, :summary, :date])
    |> validate_required([:title, :ingredients, :summary, :date])
  end
end

As you can see My changeset is not redistricting anything. Should I then add max: 250?

No, but You should show your form code…

String is limited to 255 char, but text is not.

It’s also strange to store date as integer, there are date and datetime types of fields.

1 Like

Form Code:

<.form let={f} for={@changeset} action={@action}>
  <%= if @changeset.action do %>
    <div class="alert alert-danger">
      <p>Oops, something went wrong! Please check the errors below.</p>
    </div>
  <% end %>

  <%= label f, :title %>
  <%= text_input f, :title %>
  <%= error_tag f, :title %>

  <%= label f, :ingredients %>
  <%= text_input f, :ingredients %>
  <%= error_tag f, :ingredients %>
<div class="summary">
  <%= label f, :summary %>
  <%= text_input f, :summary %>
  <%= error_tag f, :summary %>
</div>
  <%= label f, :date %>
  <%= number_input f, :date %>
  <%= error_tag f, :date %>

  <div>
    <%= submit "Save" %>
  </div>
</.form>

Try changing text_input in your summary section to textarea (thx @kokolegorille :blush:). Is that the behavior you’re looking for?

Also what @kokolegorille said about date and datetime field types.

textarea, withouth dash in between :slight_smile:

This is a string field… limited to 255, use text instead.

1 Like

Yes It created a bigger textarea input as per the box, but the amount of char is still the same limited to 255

In your schema update your summary to: field :summary, :text. You can see the supported mix phx.gen.schema types from docs.

1 Like

Good Afternoon,

I went ahead and changed the Filed in my Schema :summary, :text. I end up getting the Error invalid unknown type

I read the documents, and :text is supported in the Schema

== Compilation error in file lib/dish_out/foods/food.ex ==
** (ArgumentError) invalid or unknown type :text for field :summary
    (ecto 3.7.2) lib/ecto/schema.ex:2211: Ecto.Schema.check_field_type!/4
    (ecto 3.7.2) lib/ecto/schema.ex:1890: Ecto.Schema.__field__/4
    lib/dish_out/foods/food.ex:8: (module)
    (stdlib 3.15) erl_eval.erl:685: :erl_eval.do_apply/6
    (elixir 1.12.0) lib/kernel/parallel_compiler.ex:319: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/7

It’s :binary in the migration.

I am sorry I don’t follow " It’s :binary in the migration. " Do you mean that I run binary ?

No, sorry I am not explicit… like this, in the migration file, located in /priv/repo/migrations

add :summary, :binary

and in the schema…

field :summary, :text

And replace text_input with textarea

You are referring to the Change func

 def change do
    create table(:delish_foods) do
      add :title, :string
      add :ingredients, :string
      add :summary, :binary
      add :date, :integer

      timestamps()
    end

Wait let me try the above

My bad, it’s binary too in the schema :frowning:

Sorry…

What is the meaning of Binary, why use binary vs Text?

I went ahead and made the corrections

1, Both the migration and schema :summary was changed to binary

  1. <%= textarea f, :summary %>

The argument error went away. But a new postgrex error came

ERROR 22001 (string_data_right_truncation) value too long for type character varying(255)

Text is the type in the db, :binary is the Ecto and Elixir type.

It’s an unlimited field of char.

Hey,

I looked at the Hex docs, could I take the same steps as what he did here to change :date type to :date this way I could use that as a format for writing dates, rather than just integers?