我有一个类似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 ????????
部分是我的问题。
答案 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