后有belongs_to的关联灵药
问题描述:
我需要创建很多roles
一个User
形式,所以我请按照下列步骤操作:后有belongs_to的关联灵药
我创建了两个型号,模式是:
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>
是否有任何w是创造它,还是我走错了路?
答
你正在创建一个Role
模型,其中name
是List
而不是每个String
name
几个Role
模型。 这就是为什么有一个错误(列表而不是字符串name
的字符串)。
也许你并不需要在用户模型用户角色单独的一个模型的一个额外的申请(字符串列表)就可以了:
schema "users" do
field :name, :string
field :cnpj, :string
field :roles, {:array, :string}
timestamps()
end
+0
感谢Oleksandr的建议,它不能解决many_to_many的问题,但在我的情况下就足够了。它解决了我的问题。 – oborba
你可以张贴的'User.changeset/2'源和'Role.changeset/2'? – Dogbert