Я действительно изо всех сил пытаюсь понять контексты в Phoenix Elixir. У меня есть три контекста: Auth
(содержит User.ex
), Groups
(Circle.ex
) и Content
(ShareMark.ex
). Внутри каждой из них есть схемы users
, circles
и sharemarks
соответственно.
Я пытаюсь понять, как использовать предварительно предоставленный create_circle
вне контекста Groups
. Есть ли что-то похожее на контекст в Ruby?
В content_test.ex
я пытаюсь определить следующее
@valid_attrs %{circle: Groups.create_circle(%{name: "My test"}), url: "google.com", title: "Google"}
defmodule ShareMark.ContentTest do
use ShareMark.DataCase
alias ShareMark.Content
use ShareMark.Groups
describe "sharemarks" do
alias ShareMark.Content.ShareMark
@valid_attrs %{circle: Groups.create_circle(%{name: "Evan's test"}), url: "google.com", title: "Google"}
@update_attrs %{circle: Groups.create_circle(%{name: "Mike's test"}), url: "duckduckgo.com", title: "DuckDuckGo"}
@invalid_attrs %{circle: Groups.create_circle(%{name: "Bad test"})}
def sharemark_fixture(attrs \\ %{}) do
{:ok, sharemark} =
attrs
|> Enum.into(@valid_attrs)
|> Content.create_sharemark()
sharemark
end
...
end
Вот circle.ex
defmodule ShareMark.Groups.Circle do
use Ecto.Schema
import Ecto.Changeset
schema "circles" do
field :name, :string
field :creator_id, :id
many_to_many :members, ShareMark.Auth.User, join_through: "users_circles"
has_many :sharemarks, ShareMark.Content.ShareMark
timestamps()
end
@doc false
def changeset(circle, attrs) do
circle
|> cast(attrs, [:name])
|> validate_required([:name])
end
end
Но выдает следующую ошибку:
** (CompileError) test/sharemark/content/content_test.exs:8: undefined function create_circle/1
Google совершенно бесполезен, так как у Феникса так мало вопросов по этому поводу. Извините за такой вопрос новичка.