Post 形态 belongs_to 联想灵药
Post a form with belongs_to association elixir
我需要创建一个包含许多 roles
的 User
,所以我按照以下步骤操作:
我创建了两个模型,模式是:
schema "roles" do
field :name, :string
belongs_to :user, Module.User
timestamps()
end
schema "users" do
field :name, :string
field :cnpj, :string
has_many :roles, Module.Role
timestamps()
end
我正在尝试创建一个表单来创建具有任何角色的用户,但没有成功。
我的 create
控制器操作如下所示:
def create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{},user_params)
case Repo.insert(changeset) do
...
在创建用户的表单中,我向 multiple_select
角色添加了一个字段,但它生成了一个无效的变更集
<%= inputs_for f, :roles, fn i -> %>
<div class="form-group">
<%= label i, :name, gettext("Roles"), class: "control-label" %>
<%= multiple_select(i, :name, ["Admin": "1", "User": "2", "Power": "3"]) %>
</div>
<% end %>
生成的变更集有错误:
#Ecto.Changeset<action: :insert, changes: %{cnpj: "01578216908926", roles: [#Ecto.Changeset<action: :insert, changes: %{}, errors: [name: {"is invalid", [type: :string]}], data: #Module.Role<>, valid?: false>], name: "xxx"}, errors: [], data: #Module.User<>, valid?: false>
有什么方法可以创建吗,还是我走错路了?
您正在创建一个 Role
模型,其中 name
是一个 List
,而不是几个 Role
模型,每个模型都有 String
name
。
这就是出现错误的原因(字段 name
的列表而不是字符串)。
也许您不需要为用户角色创建一个单独的模型,在用户模型中添加一个额外的字段(字符串列表)就可以了:
schema "users" do
field :name, :string
field :cnpj, :string
field :roles, {:array, :string}
timestamps()
end
我需要创建一个包含许多 roles
的 User
,所以我按照以下步骤操作:
我创建了两个模型,模式是:
schema "roles" do
field :name, :string
belongs_to :user, Module.User
timestamps()
end
schema "users" do
field :name, :string
field :cnpj, :string
has_many :roles, Module.Role
timestamps()
end
我正在尝试创建一个表单来创建具有任何角色的用户,但没有成功。
我的 create
控制器操作如下所示:
def create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{},user_params)
case Repo.insert(changeset) do
...
在创建用户的表单中,我向 multiple_select
角色添加了一个字段,但它生成了一个无效的变更集
<%= inputs_for f, :roles, fn i -> %>
<div class="form-group">
<%= label i, :name, gettext("Roles"), class: "control-label" %>
<%= multiple_select(i, :name, ["Admin": "1", "User": "2", "Power": "3"]) %>
</div>
<% end %>
生成的变更集有错误:
#Ecto.Changeset<action: :insert, changes: %{cnpj: "01578216908926", roles: [#Ecto.Changeset<action: :insert, changes: %{}, errors: [name: {"is invalid", [type: :string]}], data: #Module.Role<>, valid?: false>], name: "xxx"}, errors: [], data: #Module.User<>, valid?: false>
有什么方法可以创建吗,还是我走错路了?
您正在创建一个 Role
模型,其中 name
是一个 List
,而不是几个 Role
模型,每个模型都有 String
name
。
这就是出现错误的原因(字段 name
的列表而不是字符串)。
也许您不需要为用户角色创建一个单独的模型,在用户模型中添加一个额外的字段(字符串列表)就可以了:
schema "users" do
field :name, :string
field :cnpj, :string
field :roles, {:array, :string}
timestamps()
end