Как бороться с логическим значением из формы отправки? - PullRequest
0 голосов
/ 29 марта 2020

мы используем флажок для отправки логических данных в форме.

В rails, при отправке формы, строка с "1" или "0" будет передана контроллеру.

В Фениксе, при отправке формы, строка с "true" или "false" будет отправлена ​​на контроллер.

Хорошо, если мы напрямую создадим объект в базе данных. Любое из значений будет сохранено как логическое значение правильно.

Но если нам нужно использовать логическое значение в нашей логике c, каков наилучший способ сделать это?

  1. Преобразовать на булево:
    # Ruby code
    def create
      admin = ActiveModel::Type::Boolean.new.cast(param[:admin])
      if admin
          ....
      end
    end
Непосредственно использовать в качестве строки:
    # Elixir code
    def create(conn, params) do
      case params[:admin] do
        "true" -> do something
        _ -> do others
      end
    end
Другие лучшие способы?

1 Ответ

0 голосов
/ 29 марта 2020

String.to_existing_atom/1 ваш друг.

Оба true и false являются атомами , а именно syntacti c сахар для :true и :false. Это потому, что в они являются атомами.

:true == true
#⇒ true
:false == false
#⇒ true

String.to_existing_atom "true"
#⇒ true
...