在 phoenix 模板中的实体之间访问

Accessing in between entity in phoenix template

我正在制作一种在校跟踪器,但我遇到了一个问题。我有两个主要实体用户、事件和实体存在,它们之间将它们绑定在一起。我正在访问模板中的主要实体,但我需要访问实体之间的相关内容以读取状态(如果存在状态 1 绿色 bg 如果 0 红色)

用户:

schema "users" do
    field :login, :string
    field :password, :string

    #stuff

    has_many :presences, Presence
    has_many :events, through: [:presences, :event]

    timestamps
  end

事件:

schema "events" do
    field :name, :string

    #Stuff

    has_many :presences, Presence, on_delete: :fetch_and_delete
    has_many :users, through: [:presences, :user]
end

存在:

schema "presences" do
    field :state, :integer

    belongs_to :user, Kpsz.Model.User, foreign_key: :user_id
    belongs_to :event, Kpsz.Model.Event, foreign_key: :event_id

    timestamps
end

我的问题是我不知道如何访问那个状态,因为我正在使用这样的数据。

模板:

<div class="row">
  <div class="col-lg-6">
    <ul>
      <li>
        <strong>Nazwa:</strong>
        <%= @event.name %>
      </li>
      </li>
    </ul>
    <div class="row">
    <%= for user <- @event.users do %>
      <div class="col-md-2 display-user">
        <div class="row">
          <%= user.class %>
        </div>
        <!-- i need access presence state here -->
        <div user_id="<%= user.id %>" event_id="<%= @event.id %>">
          Potwierdz
        </div>
      </div>
    <%= end %>
    </div>

  </div>
  <div class="col-lg-6" id="map-container">
  </div>
</div>

最后是行动:

def show(conn, %{"id" => id}) do
    event = Repo.get!(Event, id) |> Repo.preload([:users])
    render(conn, "show.html", event: event)
end

您可以更改您的理解以使用 presences(将在预加载用户时预加载。)每个存在将包含您需要的 user

<%= for presence <- @event.presences do %>
  <div class="col-md-2 display-user">
    <div class="row">
      <%= presence.user.class %>
    </div>
    <%= presence.state %>
    <div user_id="<%= presence.user.id %>" event_id="<%= @event.id %>">
      Potwierdz
    </div>
  </div>
<%= end %>