Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir (ArgumentError)无法为<;协会>;_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Elixir (ArgumentError)无法为<;协会>;

Elixir (ArgumentError)无法为<;协会>;,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,在嵌套表单上呈现变更集错误时遇到一些问题 表单呈现: def new(conn, _) do changeset = Organizations.Organization.create_organization_changeset(%Organization{workspace: %Workspace{}}) render(conn, "new.html", changeset: changeset) end 表单最初呈现为罚款: <%= form_for @changeset,

在嵌套表单上呈现变更集错误时遇到一些问题

表单呈现:

def new(conn, _) do
  changeset = Organizations.Organization.create_organization_changeset(%Organization{workspace: %Workspace{}})
  render(conn, "new.html", changeset: changeset)
end
表单最初呈现为罚款:

<%= form_for @changeset, signup_path(@conn, :create), fn f -> %>

  <%= text_input f, :name, class: "form-control", required: true, autofocus: true %>
  <%= label f, :organization_name %>
  <%= error_tag f, :name %>

  <%= inputs_for f, :workspace, fn w -> %>
    <%= text_input w, :subdomain, required: true %>
    <%= error_tag w, :subdomain %>
  <% end %>

<% end %>
“快乐之路”运作良好。但是,如果
工作区
存在变更集错误,例如:

#Ecto.Changeset<
  action: :insert,
  changes: %{
    name: "test",
    organization: #Ecto.Changeset<action: :update, changes: %{}, errors: [],
     data: #Organizations.Organization<>, valid?: true>,
    organization_id: 1,
    subdomain: "democompany",
    tenant: "test"
  },
  errors: [
    unique_subdomains: {"That workspace URL is not available.",
     [constraint: :unique, constraint_name: "unique_subdomains"]}
  ],
  data: #Workspaces.Workspace<>,
  valid?: false
>
工作区架构:

schema "workspaces" do
  field :subdomain, :string
  belongs_to :organization, Pricetable.Organizations.Organization

  timestamps(type: :utc_datetime_usec)
end
组织架构:

schema "organizations" do
  ...
  field :workspace_id, :integer
  has_one :workspace, Workspaces.Workspace
end

错误消息显示:

** (ArgumentError) could not generate inputs for :workspace from Workspaces.Workspace
因此,我假设您传递的是
@changeset
中的工作区,而不是组织。然后,
inputs\u for
尝试从工作区获取工作区。因此,我会确保
@changeset
实际上是一个组织

另外,对于,同时使用多输入和
输入有点笨拙<用于
的代码>输入通常与
cast\u assoc/cast\u embed
一起使用,它可以在内部为您设置多重输入,因此您无需手动执行。更多信息请点击此处:


或者,您可以删除的输入,并分别处理这两个变更集。

谢谢。实际上我在你的博文中尝试过使用
cast\u assoc
之类的,但是
Organization
Workspace
在不同的数据库模式上,所以失败了:你的Ecto版本是什么?如果它是Ecto 3.0并且不起作用,那么我担心它不会起作用,因为它假设所有模式都在同一前缀中。因此,对使用Multi而不是
cast\u assoc+inputs\u确实是最好的方法。
schema "organizations" do
  ...
  field :workspace_id, :integer
  has_one :workspace, Workspaces.Workspace
end
** (ArgumentError) could not generate inputs for :workspace from Workspaces.Workspace