Следите за функциональностью
У меня есть приложение, как Twitter, где users
могут следовать друг за другом через Connection
модель. В таблице, где перечислены все люди, которые следуют @user
Я хотел бы реализовать ссылку на Follow Back
, Могу ли я сделать это с помощью ссылки или мне нужно сделать это с помощью форм и просто отобразить кнопки? Как настроить наборы изменений для этих форм?
Web / модели /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 / модели /connection.ex
defmodule MyApp.Connection do
use MyApp.Web, :model
schema "connections" do
belongs_to :follower, MyApp.User
belongs_to :followee, MyApp.User
[...]
Web / контроллеры /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 / шаблоны / пользователь /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>
[...]
link ????????
часть моя проблема
1 ответ
Вы можете связать с действием, реализующим Follow back, следующим образом:
link "Follow back", to: user_path(@conn, :follow_back, user_id, [])
Заголовок будет примерно таким:
def follow_back(conn, %{"id" => id})
В вашем роутере:
get "/follow_back/:id", UserController, :follow_back
Это решение пропускает наборы изменений вообще. Если вы хотите провести пользовательскую проверку данных, есть отличный пост по использованию embedded_schema
для форм, которые не сохраняются непосредственно в базе данных: http://blog.plataformatec.com.br/2016/05/ectos-insert_all-and-schemaless-queries/
Документы по ссылке html находятся здесь: https://hexdocs.pm/phoenix_html/Phoenix.HTML.Link.html Учебное пособие по маршрутизации: http://www.phoenixframework.org/docs/routing и учебное пособие по контроллерам: http://www.phoenixframework.org/docs/controllers