2015-07-22 2 views
1

J'essaie d'obtenir le succès ou l'insuccès d'une requête à mon RethinkDB dans le cadre Phoenix à travers un message Flash. Cependant, je ne connais pas la bonne signature pour récupérer le message de résultat de RethinkDB dans mon bloc de code.Comment gérer les messages flash de succès/erreur de Rethinkdb dans Phoenix

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: D'accord, je trouve qu'il y est censé être un champ d'erreurs le long des lignes de:

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

Cependant, je ne semblent avoir (je l'ai essayé comme q.errors et q.data.errors) et j'obtiens une erreur à chaque fois. L'erreur que je suis en train de tester est si la table de base de données n'existe pas (je change contentText pour autre chose entièrement).

Je suis en mesure de faire une erreur de vérification des données:

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 

Cependant, cela semble être une solution limitée car il ne détecte que s'il y a des données dans le message. Une erreur peut être autre chose entièrement. Et puisque ce champ semble les compter je voudrais obtenir cette valeur et l'utiliser dans ma condition à la place (si les erreurs> 0). De quoi ai-je besoin pour obtenir ce champ?

Répondre

0

utilisez q.data["errors"]) au lieu de q.data.errors. Selon le numéro hamiltop/rethinkdb-elixir#59, vous pouvez utiliser q.data["r"] en cas d'échec.

+0

Cela semble résoudre cette partie du problème. Mais je manque toujours sur la façon de chaîner cela à un message flash. – mesosteros

+0

Non. Ce que je veux dire, c'est que je veux déclencher un message flash avec le message d'erreur du côté client. Je sais comment les exécuter du côté de mon client, mais je ne sais pas comment envoyer un déclencheur pour un de ma chaîne. – mesosteros

+0

Selon la [documentation Phoenix] (http://www.phoenixframework.org/docs/controllers#section-flash-messages), vous avez raison. Si vous voulez envoyer l'erreur RethinDB il suffit de changer le 'put_flash (: erreur," Erreur ")' à "put_flash (: erreur, Enum.join (q.data [" r "]," \ n "))'. –