不知怎的,我无法通过 Guardian 在 Phoenix / Ecto 中使用它:
changeset = case Guardian.Plug.authenticated?(conn) do
true ->
Guardian.Plug.current_resource(conn) # == existing user
|> build_assoc(:meetings) # successfully builds a meeting with user_id
|> Meeting.changeset_with_user(meeting_params) # removes user_id
_ ->
Meeting.changeset(%Meeting{}, meeting_params)
end
schema "meetings" do
field :title, :string
field :description, :string
belongs_to :user, User
end
def changeset(model, params \\ %{}) do
model
|> cast(params, [:title], [:description])
end
def changeset_with_user(model, params \\ %{}) do
model
|> changeset(params)
|> assoc_constraint(:user)
end
如何插入meeting
与关联的user
?调用build_assoc
可正确设置user_id
,但调用changeset
会再次删除关联。用户可以成功进行身份验证。我在这里缺少什么?
答案 0 :(得分:0)
请参阅此comment,changeset
不直接包含关联的属性,而是通过changeset.data
。
我们将从changeset.data解除其他字段,包括user_id
因此,一旦插入,关联将被正确设置。