Ich habe eine Abfrage in einem Phoenix-Controller, der eine Liste von Studenten erhält, und für jede Zeile in der Liste ein Join mit der Blutgruppe auf seiner ID und erhält die Blutgruppe Name. Ich möchte das in einer EEX-Vorlage anzeigen, die ich generierte, aber Fehler erhalte.Angefragte Daten von Phoenix Controller in EEX-Vorlage anzeigen
Hier ist das Studenten Schema:
schema "students" do
field :firstname, :string
field :lastname, :string
field :birthday, Ecto.Date
field :joined_on, Ecto.Date
field :bloodgroup_id, :integer
timestamps()
end
Hier ist die Blutgruppe Modell:
schema "bloodgroups" do
field :name, :string
timestamps()
end
ich die Daten in der Steuerung wie so bekommen:
def query do
query = from s in Student,
join: b in BloodGroup, on: s.bloodgroup_id == b.id,
select: [s.firstname, s.lastname, s.birthday, s.joined_on, s.bloodgroup_id, b.name]
end
def index(conn, _params) do
students = Repo.all(query)
render(conn, "index.html", student_info: students)
end
und Anzeigen in die Vorlage wie folgt:
<%= for student <- @student_info do %>
<tr>
<td><%= Enum.fetch(student, 0) %></td>
<td><%= student[:lastname] %></td>
<td><%= student[:birthday] %></td>
<td><%= student[:joined_on] %></td>
<td><%= student[:name] %></td>
<td class="text-right">
<%= link "Show", to: student_path(@conn, :show, student), class: "btn btn-default btn-xs" %>
<%= link "Edit", to: student_path(@conn, :edit, student), class: "btn btn-default btn-xs" %>
<%= link "Delete", to: student_path(@conn, :delete, student), method: :delete, data: [confirm: "Are you sure?"], class: "btn btn-danger btn-xs" %>
</td>
</tr>
<% end %>
Aber das mit dem Formular Enum.fetch
und student[:firstname]
funktionieren nicht und werfen entweder Argument error
oder protocol Phoenix.HTML.Safe not implemented
möchte ich zeigen, was von der Steuerung in der Vorlage gesendet wurde, aber diese Fehler am schlägt. Gibt es einen besseren Weg, dies zu tun? Ich bin neu in Phoenix und Elixier.
Vielen Dank! Ich ging den idiomatischen Weg und nutzte die Beziehung, die viel einfacher war. Obwohl ich einen Fehler mit dem obigen 'gehört_to' habe. Nach einigen Recherchen habe ich folgendes verwendet und es funktionierte: 'gehört zu: Blutgruppe, Blutgruppe, Fremdschlüssel:: Blutgruppe_ID' – Destroid
@Destroid danke! Ich habe die Antwort behoben. – Dogbert