后有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是创造它,还是我走错了路?

+0

你可以张贴的'User.changeset/2'源和'Role.changeset/2'? – Dogbert

你正在创建一个Role模型,其中nameList而不是每个Stringname几个Role模型。 这就是为什么有一个错误(列表而不是字符串name的字符串)。

也许你并不需要在用户模型用户角色单独的一个模型的一个额外的申请(字符串列表)就可以了:

schema "users" do 
    field :name, :string 
    field :cnpj, :string 
    field :roles, {:array, :string} 

    timestamps()      
end 
+0

感谢Oleksandr的建议,它不能解决many_to_many的问题,但在我的情况下就足够了。它解决了我的问题。 – oborba