2017-04-15 9 views
0

データベーステーブルからすべてのエントリを取得して返すルートを作成したいと思います。 router.exでデータベースからフェッチしてHTTP応答で結果を返すコントローラへの経路

:rep​​o.exで

get "/categories/" do 
    [controller] = ["repo"] 
    Api.Repo.getCategories(conn, controller) 
    end 

def getCategories(conn, controller) do 
    conn 
    start_link 
    categories = Api.Category |> all 
    |> put_resp_content_type("application/json") 
    |> send_resp(200, categories) 
    end 

Api.Category.ex

defmodule Api.Category do 
    use Ecto.Schema 

    schema "categories" do 
    field :name, :string 
    end 

    def changeset(category, params \\ %{}) do 
    category 
    |> Ecto.Changeset.cast(params, [:name]) 
    |> Ecto.Changeset.validate_required([:name]) 
    end 
end 

私はこれらの警告やエラーを取得しています:

warning: variable conn in code block has no effect as it is never returned (remove the variable or a 
ssign it to _ to avoid warnings) 
    lib/api/repo.ex:174 

warning: variable "start_link" does not exist and is being expanded to "start_link()", please use pa 
rentheses to remove the ambiguity or change the variable name 
    lib/api/repo.ex:175 

warning: variable "categories" does not exist and is being expanded to "categories()", please use pa 
rentheses to remove the ambiguity or change the variable name 
    lib/api/repo.ex:178 

warning: variable "controller" is unused 
    lib/api/repo.ex:173 

warning: variable "categories" is unused 
    lib/api/repo.ex:176 


== Compilation error on file lib/api/repo.ex == 
** (CompileError) lib/api/repo.ex:178: undefined function categories/0 
    (stdlib) lists.erl:1338: :lists.foreach/2 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 

私はcategoriesを使用しているようです。私は間違って何をしていますか?

+0

ああ私は...良いコード品質です。 – JustMichael

答えて

0

あなたのエラーは、このカテゴリに割り当てられている単一のパイプラインである

categories = Api.Category |> all 
|> put_resp_content_type("application/json") 
|> send_resp(200, categories) 

によって引き起こされます。したがって、send_resp(200, categories)のカテゴリは設定されていません。

それを明確にするために、これは同じコードを書くための別の方法です:

categories = 
    Api.Category 
    |> all 
    |> put_resp_content_type("application/json") 
    |> send_resp(200, categories) 

はさらに、connstart_linkは見当違いです。 connは何もせず、start_linkは通常、失われたpidを返します。私はあなたのようなものにしようとしていたと信じて

categories = all Api.Category 
    conn 
    |> put_resp_content_type("application/json") 
    |> send_resp(200, categories) 

全例が奇妙に見えます。私はRepoモジュールでこの種のものを見たことはありません。通常、これはコントローラ内にあります。以前のようなルートを作成したことがないので、route.exファイルにはコメントできません。

例は次のとおりですか?もしそうなら、それは何ですか?

+0

ありがとう!私は[このEcto開始ページ](https://hexdocs.pm/ecto/getting-started.html)と[このElixirプラグルートを使い始める方法についてのチュートリアル]を行っています(https://jarredtrost.com/getting-私はそれらを一緒にマッシュして、データベースとのフロントエンドインターフェイスを取得し、データベースエントリを取得し、挿入するAPIを作成しようとしています。私はコントローラが欲しいですが、ちょっと失われています。私はデータベースクエリをコントローラに移動しようとします。私はそれがRepoモジュールにあるはずのRepoデータベース上で動作しているので、私は考えました。 – BeniaminoBaggins

+0

私がしようとしていたのは、 "categories"データベーステーブル内のすべてのエントリを選択し、http応答本体に戻すことでした。あなたの例は、カテゴリデータベーステーブルのエントリを取得しますか? – BeniaminoBaggins

+0

私は 'Repo Api.Repoが起動していません。あなたの監督ツリーの一部であることを確認してください.'エラー – BeniaminoBaggins

関連する問題