Lassen Sie uns sagen, ich habe dieses Modell in einer App Phoenix.Zugriff auf fremde Beziehung Feld durch Vorlage
defmodule Rumbl.Video do
use Rumbl.Web, :model
schema "videos" do
field :url, :string
field :title, :string
field :description, :string
belongs_to :user, Rumbl.User
belongs_to :category, Rumbl.Category
timestamps()
end
@required_fields ~w(url title description)
@optional_fields ~w(category_id)
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
Und das Kategoriefeld repräsentiert zu einem Kategorie-Modell eine Beziehung, die einen Feldnamen genannt hat.
Dann in der Vorlage Ich habe dies:
<%= for video <- @videos do %>
<tr>
<td><%= video.user_id %></td>
<td><%= video.url %></td>
<td><%= video.title %></td>
<td><%= video.description %></td>
<td><%= video.category_id %></td>
<td class="text-right">
<%= link "Show", to: video_path(@conn, :show, video), class: "btn btn-default btn-xs" %>
<%= link "Edit", to: video_path(@conn, :edit, video), class: "btn btn-default btn-xs" %>
<%= link "Delete", to: video_path(@conn, :delete, video), method: :delete, data: [confirm: "Are you sure?"], class: "btn btn-danger btn-xs" %>
</td>
</tr>
<% end %>
Wie Sie sehen können, ich video.category_id
Wie zugreifen kann ich video.category.name zugreifen es menschlichere lesbar zu machen?
Edit: Video-Controller-Index und Kategorien Teil
defmodule Rumbl.VideoController do
use Rumbl.Web, :controller
alias Rumbl.Video
def action(conn, _) do
apply(__MODULE__, action_name(conn),
[conn, conn.params, conn.assigns.current_user])
end
def index(conn, _params, user) do
videos = Repo.all(user_videos(user)) |> Repo.preload(:category)
render(conn, "index.html", videos: videos)
end
alias Rumbl.Category
plug :load_categories when action in [:new, :create, :edit, :update]
defp load_categories(conn, _) do
query =
Category
|> Category.alphabetical
|> Category.names_and_ids
categories = Repo.all query
assign(conn, :categories, categories)
end
end
stellen Sie sicher, dass Sie Relation vorladen, und danach können Sie über 'video.category.name' zugreifen. Sehen Sie sich diesen Artikel an - https://robots.thoughtbot.com/preloading-nested-associations-with-ecto – Avdept