【发布时间】:2017-04-14 10:03:38
【问题描述】:
我正在尝试在表 worklogs 中插入一个 Ecto 模型,该表有两个关系 user_id 和 issue_id。我发现,当我尝试为具有这两个字段的有效整数的工作日志创建变更集时,它们不包含在变更集中,并且在生成的 worklog 和 API 响应中为空。我已确保存在 user 和 issue 以及我使用 worklog 插入的主键。
我还查看了文档,似乎build_assoc/3 是更新关系的方式,但它似乎仅限于插入单个关系。从文档中,我认为我应该这样做:
user = #get the user
worklog = Ecto.build_assoc(user, :worklogs, worklog_params)
但是我从来没有在user上声明过worklogs,那么它怎么知道在工作日志上设置user_id呢?另外,我如何随后添加issue_id?
架构:
schema "worklogs" do
field :start_time, Ecto.DateTime
field :end_time, Ecto.DateTime
belongs_to :issue, MyApi.Issue
belongs_to :user, MyApi.User
timestamps()
end
schema "users" do
field :name, :string
timestamps()
end
schema "issues" do
field :title, :string
field :status, :string
field :description, :string
field :estimate, :float
timestamps()
end
控制器逻辑:
def create(conn, %{"worklog" => worklog_params}) do
changeset = Worklog.changeset(%Worklog{}, worklog_params)
IO.inspect changeset #user_id and issue_id are not present
case Repo.insert(changeset) do
{:ok, worklog} ->
conn
|> put_status(:created)
|> put_resp_header("location", worklog_path(conn, :show, worklog))
|> render("show.json", worklog: worklog)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(MyApi.ChangesetView, "error.json", changeset: changeset)
end
end
POST 请求:
{
"worklog": {
"start_time": "2017-04-08 02:20:00",
"end_time": "2017-04-08 02:30:00",
"issue_id": 1,
"user_id": 1
}
}
【问题讨论】:
-
能否请您发布相关架构?
-
@JustinWood 好主意,已更新。
-
那个新错误应该是无关的。
标签: elixir phoenix-framework ecto