如何使用ecto和guardian建立关联

时间:2016-11-24 08:58:24

标签: elixir phoenix-framework ecto

不知怎的,我无法通过 Guardian Phoenix / Ecto 中使用它:

MeetingController#创建

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会再次删除关联。用户可以成功进行身份验证。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

请参阅此commentchangeset不直接包含关联的属性,而是通过changeset.data

  

我们将从changeset.data解除其他字段,包括user_id

因此,一旦插入,关联将被正确设置。