Как обрабатывать флэш-сообщения об успехе/ошибке от Rethinkdb в Phoenix

Я пытаюсь получить сообщение об успехе или неудаче запроса к моей RethinkDB в Phoenix Framework с помощью сообщения Flash. Однако я не знаю правильной подписи для получения сообщения о результате из RethinkDB в моем блоке кода.

def index(conn, _params) do

  #Query that creates a table in the database
    table_create("contentText")
    |> Basedados.Database.run
      # List all elements of a table from the database
    q = table("contentText")
      |> Basedados.Database.run #Run the query through the database
      |> IO.inspect
    conn
    |> put_flash(:error, "Some Message")
    |> put_flash(:info, "Another Message")
    |> render "index.html", contentText: q #Render users searched on the users template
  end

EDIT: Хорошо, я обнаружил, что должно быть поле ошибок в строках:

%RethinkDB.Record{data: %{"deleted" => 0, "errors" => 0, "generated_keys" => ["15cc4e19-fc72-4c19-b3a5-47141b6a63e0"], "inserted" => 1, "replaced" => 0, "skipped" => 0, "unchanged" => 0}}

Однако у меня, похоже, его нет (я пробовал как q.errors и q.data.errors), и каждый раз получаю сообщение об ошибке. Ошибка, которую я тестирую, заключается в том, что таблица базы данных не существует (я полностью меняю contentText на что-то другое).

Я могу выполнить проверку ошибок с данными:

q = table("contentText")
  |> Basedados.Database.run #Run the query through the database

if is_nil(q.data) do
  conn
  |> put_flash(:error, "Error")
  |> render "index.html", contentText: "failed" #Render users searched on the users template
else
  conn
  |> put_flash(:info, "Sucess")
  |> render "index.html", contentText: q #Render users searched on the users template
end

Однако это кажется ограниченным решением, поскольку оно определяет только наличие данных в сообщении. Ошибка может быть совершенно другой. И поскольку это поле, кажется, их подсчитывает, я хотел бы получить это значение и вместо этого использовать его в моем состоянии (если ошибки> 0). Что мне нужно, чтобы получить это поле?


person mesosteros    schedule 22.07.2015    source источник


Ответы (1)


используйте q.data["errors"]) вместо q.data.errors.

согласно проблеме hamiltop/rethinkdb-elixir#59, вы можете использовать q.data["r"] на отказ.

person Gullit Miranda    schedule 28.07.2015
comment
Кажется, это решает эту часть проблемы. Но я все еще не знаю, как связать это с флеш-сообщением. - person mesosteros; 28.07.2015
comment
Нет. Я имею в виду, что я хочу вызвать флэш-сообщение с сообщением об ошибке на стороне клиента. Я знаю, как выполнять их на стороне клиента, но не знаю, как отправить триггер для одного из них с моего канала. - person mesosteros; 29.07.2015
comment
Согласно документации Phoenix, вы все делаете правильно. Если вы хотите отправить ошибку RethinDB, просто измените put_flash(:error, "Error") на put_flash(:error, Enum.join(q.data["r"], "\n")). - person Gullit Miranda; 29.07.2015