にレポモジュールを使用する方法私<strong>タグ</strong>モデルのコードでは、私のモデルファイル
schema "tags" do
field :name, :string
field :parent, :integer # parent tag id
timestamps
end
def add_error_when_not_exists_tag_id(changeset, params) do
tags = Repo.all(Tag)
is_exists_tag_id = Enum.reduce(tags, fn(x, acc) -> acc || (x.id === params.parent) end)
if is_exists_tag_id, do: changeset, else: add_error(changeset, :parent, "not exists parent!")
end
エラー以下の原因。
(UndefinedFunctionError) undefined function: Repo.all/1 (module Repo is not available)
エラーを修正できますか?
タグのモデルはのネストされたタグモデルです。
タグは親タグを持つことができます。
最終的なコードは以下のとおりです。これはうまく動作します。それは、このモジュールでは使用できないようコントローラ
def create(conn, %{"tag" => tag_params}) do
changeset = Tag.changeset(%Tag{}, tag_params)
|> Tag.add_error_when_not_exists_tag_id(tag_params, Repo.all(Tag))
//
// ...
は、詳細な回答ありがとうござい呼び出しと同様の機能を使用しています
TagService
モジュールを作成することを検討!検証ロジックを 'tag_controller.ex'で書きます。なぜなら、私はTagモデルにとってこれまでに他のロジックを持っていないからです。 – 2YY私は間違いを犯しました...関数として純粋なロジックを 'tag.ex'で書き、コントローラから関数を呼び出そうとします。私はポイントを得た。 'changeset = Tag.changeset(%Tag {}、tag_params)|> Tag.add_error_when_not_exists_tag_id(tag_params)' – 2YY