Эликсир Ecto - как сделать ассоциированный [дубликат]

Попытайтесь использовать следующие стратегии, чтобы улучшить производительность вашего приложения:

  • Если возможно, используйте многопоточное программирование. Преимущества производительности огромны, даже если ваш смартфон имеет одно ядро ​​(потоки могут работать в разных ядрах, если процессор имеет два или более). Полезно сделать вашу логику приложения отделенной от пользовательского интерфейса. Используйте Java-потоки, AsyncTask или IntentService. Проверьте это .
  • Прочитайте и следуйте советам по разным характеристикам веб-сайта разработки Android. Проверьте здесь .

6
задан IgorekPotworek 13 January 2016 в 11:37
поделиться

1 ответ

Использование render_many / 4 является правильным.

Если вы хотите определить функцию рендеринга role.json в том же модуле, вы можете сделать:

def render("user.json", %{user: user}) do
  %{
    id: user.id,
    name: user.name,
    roles: render_many(user.roles, __MODULE__, "role.json", as: :role)
  }
end

def render("role.json", %{role: role}) do
  %{
    id: role.id
    ... 
  }
end

Обратите внимание, что мы передаем функцию as: :role в функцию render_many. Это связано с тем, что назначение (часть %{role: role}) выводится из имени представления. В этом случае это UserView, поэтому по умолчанию это будет %{user: user}.

Если вы определяете модуль RoleView, вы можете просто переместить функцию def render("role.json") в новый RoleView и вызовите render_many без опции as:

...
roles: render_many(user.roles, MyApp.RoleView, "role.json")
...

Другой вариант, который может быть предпочтительным для вас, - это получить протокол в вашей модели:

defmodule App.Role do
  use App.Web, :model
  @derive {Poison.Encoder, only: [:id, :name]}

  schema "roles" do
    has_many :roles_users, App.RolesUser
    has_many :users, through: [:roles_users, :user]
    field :name, :string
    timestamps
  end

Лично Я чувствую, что эта пара моделирует ваше мнение, поэтому я предпочитаю использовать первый вариант.

20
ответ дан Gazler 17 August 2018 в 14:56
поделиться
  • 1
    Оно работает! Спасибо! Я получил роль «роли»: [{& quot; name & quot ;: & quot; Administrador & quot ;, id & quot ;: 2}], – Gidrek 12 January 2016 в 23:23
  • 2
    Отличный ответ и полезный. Одна вещь: не должна: role: render_many (user.roles, MODULE , & quot; role.json & quot ;, как:: role) на самом деле быть: role: render_many (user.roles, MODULE , «role.json», как:: role), чтобы должным образом соответствовать определенной функции рендеринга, принимающей «role.json». как аргумент? – Nik 14 April 2016 в 13:49
  • 3
    @Nik Отличное место. Я обновил ответ. Как вы знаете, вы можете использовать обратные элементы (`Like this`), чтобы __MODULE__ не отображался как MODULE . – Gazler 14 April 2016 в 13:57
Другие вопросы по тегам:

Похожие вопросы: