跟进功能

时间:2016-05-09 09:02:12

标签: elixir phoenix-framework

我有一个类似Twitter的应用程序,其中users可以通过Connection模型相互关注。在一个表格中列出了所有关注@user的人,我想要实现Follow Back的链接。我可以使用链接执行此操作,还是必须使用表单执行此操作并只显示按钮?如何为这些表单设置更改集?

网络/模型/ 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]
[...]

网络/模型/ connection.ex

defmodule MyApp.Connection do
  use MyApp.Web, :model

  schema "connections" do
    belongs_to :follower, MyApp.User
    belongs_to :followee, MyApp.User
[...]

网络/控制器/ 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
[...]

网络/模板/用户/ 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 个答案:

答案 0 :(得分:1)

您可以链接到执行后续操作的操作:

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