3

Phoenix の RethinkDB (Hamiltop https://github.com/hamiltop/rethinkdb-elixirの rethinkdb-elixir パッケージを使用) でデータベースのデータを表示しようとしています。私は両方に比較的慣れていませんが、すでに 2 つのテーブルといくつかのデータをそれらのテーブルに挿入することができました。これは、RethinkDB の Web GUI で確認したのでわかります。

ここで、プロジェクトの html ページにテーブル データを表示したいと考えています。エラーを 1 つに減らしました。

protocol Phoenix.HTML.Safe not implemented for %RethinkDB.Collection{data: [%{"first_name" => "Carlos", "id" => "4be8adc3-0973-45dc-bdb8-7a4dac6528d5", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "c84658fc-e4a4-4cb6-8107-b011ca996abd", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "c09fe081-379a-4334-97a3-31c5503c8c61", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "cf0c0ad3-3152-40f0-b613-5b051a314b51", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "ca28a714-ed54-4ebd-8707-d53170ead0f7", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "1ea77c0f-538c-4663-be92-499f16996594", "last_name" => "Santos"}, %{"first_name" => "Carlos", "id" => "1ea74846-0860-4ae5-95f5-674860cf7fc6", "last_name" => "Santos"}]}

明らかに、挿入されたすべてのカルロス・サントスの人物をテーブルから取得しています (これも防止する必要がありますが、それは私の主な問題ではありません) が、フェニックス プロジェクトにそれらを取得する際にエラーが発生します。

テーブルとデータを作成するコントローラーのインデックス ページがあります。次に、新しいページ router.exを追加しました。

get "/users", UsersController, :users

/views/users_view.ex :

defmodule RethinkExample.UsersView do
  use RethinkExample.Web, :view
end

users.html.eex :

<div class="jumbotron">
  <p><%= @users %>!</p>
</div>

users_controller.ex

defmodule RethinkExample.UsersController do
  use RethinkExample.Web, :controller
  use RethinkDB.Query

    def users(conn, _params) do
        q = table("users")
            |> filter(%{last_name: "Santos"})
            |> RethinkExample.Database.run
        |> IO.inspect
        render conn, "users.html", users: q
    end

終わり

これは、ルート固有の ID を html タグ内に表示する方法であるため、html コードも正しくないと推測します。データを正常にフェッチして、それを html タグに表示するにはどうすればよいですか?

4

1 に答える 1

2

ここでの問題は、データ構造@usersのタイプ%RethinkDB.Collection{}( source ) を使用して出力できないことです。<%=...%>

ユーザーを反復して出力したいと思うでしょう。何かのようなもの:

<%= for user <- @users.data do %>
  <p><%= "#{user["first_name"]} #{user["last_name"]}" %>!</p>
<% end %>

ここでは、リスト内包@users.data表記を使用して、配列のすべての項目を反復処理しています。これは、EEx で要素の配列 (ユーザー、ブログ投稿、コメントなど) を出力する一般的な方法です。

しなければならないのを防ぐのではなく、通過することを検討することもq.dataできます。@usersq@users.data

余談ですが、リスト内包表記内でパターン マッチングを使用することもできます。

<%= for %{"first_name" => first_name, "last_name" => last_name} <- @users.data do %>
  <p><%= "#{first_name} #{last_name}" %>!</p>
<% end %>

これは、マップ内の多くのフィールドを使用する予定がない場合に便利です。

于 2015-07-17T15:39:58.447 に答える