2016-10-31 10 views
1

мне нужно создать User со многими roles, поэтому я выполните следующие действия:сообщение форма с 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

ответ

0

Вы создаете одну Role модель, в которой name является List вместо нескольких Role моделей каждый с Stringname. Вот почему возникает ошибка (вместо списка вместо String для поля name).

Может быть, вам не нужна отдельная модель для пользовательских ролей один дополнительный подал (список строк) в модели пользователя будет хорошо:

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

    timestamps()      
end 
+0

Спасибо за предложение Александра, это не проблема с many_to_many, но в моем случае этого достаточно. Это решило мою проблему. – oborba

 Смежные вопросы

  • Нет связанных вопросов^_^