5

Phoenix と Ecto を使用して、主キーで単一レコードのデータベースをクエリしています。すべてのドキュメント/例は、Phoenix コントローラーでの使用法を示しています。

def show(conn, %{"id" => id}) do
  m = Repo.get(MyModel, id)

  ...
end

ただし、Phoenix のすべてのパラメーターは文字列であるため、これは** (Ecto.InvalidModel) model App.MyModel failed validation when , field id had type string but type integer was expected. 次のようなことを行うことで、コントローラーでこれを回避しています。

def show(conn, %{"id" => id}) do
   m = String.to_integer(id) |> find_my_model_by_id

  ...
end

defp find_my_model_by_id(id) do
 Repo.get(MyModel, id)
end

問題は、この種の型変換を行っている人を他に見たことがないことです。Phoenix や Ecto が正しくセットアップされていないのではないかと心配しています。Repo.get/2id 引数をint に自動的に強制する、欠落している Phoenix/Ecto 規則はありますか?

4

2 に答える 2

0

あなたのコードは正しいです。今後の Ecto バージョンでは、このような場合の自動キャストを追加したいと考えています。ただし、今のところ、手動​​でキャストする必要があります。

于 2014-12-18T10:47:47.450 に答える