2016-06-10 2 views
1

У меня есть: поле «группы групп» в моей модели ecto и им нужно вставить в него некоторые данные.Phoenix framework & Ecto map field

Пример: Im есть некоторые данные пользователя, как: имя пользователя: "тестер", группа: "по умолчанию" и т.д.

После сохранения в базе данных, поле "группы" должно выглядеть так:

[{username: "tester", group: "default"}, {username: "tester1", group: "admin"} etc...] 

Также как я могу изменить данные этого поля в функции (когда мне нужно будет добавить некоторые дополнительные записи, например)?

+0

вы имели в виду список карт, как '[{имя пользователя: ..., группа : ...}, {username: ..., group: ...}] '? Ваше текущее значение примера недопустимо. – Dogbert

+0

да, под редакцией. спасибо – bartezr

+1

Можете ли вы также включить объявление 'field: groups, ...', которое вы используете в своей модели? и какую базу данных вы используете? PostgreSQL? – Dogbert

ответ

2

Вы можете использовать embeds_many/3

Вот раствор образца для вас

defmodule MyApp.UserGroup do 
    use Ecto.Schema 

    embedded_schema do 
    field :username 
    field :group 
    end 
end 

вы можете добавить его embeds_many вашей схеме

defmodule MyApp.Group do 
    use Ecto.Schema 

    schema "groups" do 
    embeds_many :usergroups, MyApp.UserGroup 
    timestamps 
    end 
end 

Давайте создадим группу

changeset = Ecto.Changeset.change(%Group{}) 
      |> Ecto.Changeset.put_embed(:usergroups, [ 
       {username: "tester", group: "default"}, 
       {username: "tester1", group: "admin"}]) 

group = Repo.insert!(changeset) 

вы можете работать с группами пользователей в качестве коллекции, а затем просто положить его в качестве изменения снова & вы можете найти подробную информацию в this blog post

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