我試圖在表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好主意,更新。 –
這個新錯誤應該是無關的。 –