Следите за функциональностью

У меня есть приложение, как 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

Другие вопросы по тегам