Ich habe eine Twitter-ähnliche Anwendung, wo users
können einander durch eine Connection
Modell folgen. In einer Tabelle, die alle Leute auflistet, die der @user
folgen, möchte ich einen Link zu Follow Back
implementieren. Kann ich das mit einem Link machen oder muss ich das mit Formularen machen und nur die Buttons anzeigen? Wie richte ich die Changesets für diese Formulare ein?Folge zurück Funktionalität
Web/Modelle/user.ex
defmodule MyApp.User do
use MyApp.Web, :model
use Arc.Ecto.Model
schema "users" do
field :last_name, :string
has_many :follower_connections, MyApp.Connection, foreign_key: :followee_id
has_many :followers, through: [:follower_connections, :follower]
[...]
Web/Modelle/connection.ex
defmodule MyApp.Connection do
use MyApp.Web, :model
schema "connections" do
belongs_to :follower, MyApp.User
belongs_to :followee, MyApp.User
[...]
web/Controller/user_controller.ex
[...]
def show(conn, %{"id" => id}) do
user =
Repo.get!(User, id)
|> Repo.preload([:followers, :follower_connections])
conn
|> assign(:user, user)
|> render("show.html")
end
[...]
web/templates/user/show.html.eex
[...]
<table>
<tbody>
<%= for connection <- @user.follower_connections do %>
<tr>
<td><%= link connection.follower.last_name %></td>
<td>
<%= link ???????? "Follow Back" %>
</td>
</tr>
<% end %>
</tbody>
</table>
[...]
Der link ????????
Teil ist mein Problem.
Würde nicht ein Formular, das connect # verwendet, nicht ein RESTful Weg sein? – wintermeyer
Es wäre total. Das einzige, was Sie im obigen Code ändern müssen, ist, dass Sie 'method:: post' hinzufügen. Es erzeugt das Formular mit einer Schaltfläche, die Sie benötigen. 'link" Folge zurück ", zu: user_path (@conn,: follow_back, user_id, []), Methode:: post'. (Es erfordert jedoch, dass JS aktiviert ist). – tkowal