在关联

时间:2017-06-18 12:22:37

标签: elixir phoenix-framework ecto

我正在创建一个小网站,将图片上传到相册。对于我都有模特。为了便于阅读,我只需将应用程序命名为Website。我的问题是,当删除相册时(以及删除用户时),我想从硬盘中删除文件。

defmodule Website.Picture do
  use Website.Web, :model
  use Arc.Ecto.Schema

  schema "pictures" do
    field :pic, Website.ImageUploader.Type
    belongs_to :album, Website.Album
  end
...
end

defmodule Website.Album do
  use Website.Web, :model

  schema "albums" do
    has_many :pictures, Website.Album
  end
...
end

通过调用图片控制器中ImageUploader的删除功能,我设法在直接删除图片时删除文件。

defmodule Website.PictureController do
  ...
  def delete(...) do
    # get picture and check that current user is the owner
    ...
    # delete image from harddisk
    Website.ImageUploader.delete({picture.pic, picture})
    # then delete from DB
    Repo.delete!(picture)
    ...
  end
end

是否有一种简单的方法可以删除文件,例如在我的ImageUploader中或者可能来自模型?或者是通过迭代专辑的所有图片在控制器中完成它的唯一方法吗?

defmodule Website.ImageUploader do
  use Arc.Definition

  use Arc.Ecto.Definition

  @version [:original]

  def __storage, do: Arc.Storage.Local
end

要清理,这是我的迁移

专辑:

create table(:albums) do
  # some fields
end

图片:

create table(:pictures) do
  add :pic, :string
  add :album_id, references(:albums, on_delete: :delete_all)
end

0 个答案:

没有答案