我试图在表worklogs
中插入一个Ecto模型,它有两个关系user_id
和issue_id
。我发现当我尝试为这两个字段的有效整数创建工作日志的变更集时,它们不包含在变更集中,并且在产生的worklog
和API响应中为空。我确定user
和issue
与我正在使用worklog
插入的主键一起存在。Ecto模型更新多个关系
我也看过文档,它似乎是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好主意,更新。 –
这个新错误应该是无关的。 –