【发布时间】:2020-02-15 19:52:12
【问题描述】:
我有一个事件页面,它是一个列表,我希望用户单击特定事件来创建一个被邀请的请求。我希望请求与该事件相关联,并希望事件数据(名称、位置等)显示在新的请求表单页面上。 事件是一种“对象”,而请求是另一种。一个事件可以有许多请求,但不能有其他方式(所以一对多)。如果这样做更好,我可以建立 has_many/belongs_to 关系,或者我可以简单地在请求中放置一个 event_id - 我没有偏好。这是一个 Phoenix 1.4 项目,没有什么特别或定制的,由 PostgreSQL 数据库支持。
我不知道如何将事件或 event_id 传递给新请求表单。 Phoenix 框架中的大多数东西都非常棒,但我无法找到正确的方法来完成这件简单的事情。
我现在所拥有的或多或少基于基本指南:
project/lib/project_web/templates/tms/event/index.html.eex(事件列表)
<table><tbody><tr><td><%= link event.title, to: Routes.tms_request_path(@conn, :new) %></td></tr></tbody></table>
这去 lib/project_web/controllers/request_controller.ex(控制器)
def new(conn, _params) do
changeset = TMS.change_request(%Request{})
render(conn, “new.html”, changeset: changeset)
end
这去 lib/project/tms.ex(上下文)
def change_request(%Request{} = request) do
Request.changeset(request, %{})
end
去哪 lib/project/tms/request.ex(架构)
def changeset(request, attrs) do
request
|> cast(attrs, [:name, :event_id, :email, :request_count]
|> validate_required([:name, :event_id, :email, :request_count]
lib/project_web/tms/request/new.html 是一个带有请求属性框的表单
现在一切正常,我可以单击事件列表中的链接并转到新请求表单页面并保存请求。显然,虽然没有以这种方式建立的 ID 或关联。 显然我想以 Elixir 的方式做到这一点,而不是一起破解一些东西。我尝试了几种不同的方法来传递 event_id,但它们似乎都不起作用,所以我知道我错过了一些东西,但在这一点上,我不知道那是什么。
【问题讨论】: