1

用户可以通过 上传剪辑Clips Scaffold,该剪辑属于一个Show和或一个Album(显示控制器,专辑控制器)。

用户可以拥有

  • 只有一场演出
  • 许多专辑

    我要完成的工作:

用户可以上传剪辑,这些剪辑可以附加到节目或/和专辑

有关更详细的概述,请查看下图: 在此处输入图像描述

问题#1我不明白的是我必须使用的关联。我目前的型号:

用户模型

has_many :clips, dependent: :destroy
has_one :show, dependent: :destroy
has_many :albums, dependent :destroy

夹子型号belongs_to :user

显示型号belongs_to :user

专辑型号belongs_to :user

---------------------------------------------------------------------------------

问题#2我不确定如何完成,当用户上传剪辑时,他可以将其附加(或分配)到节目或专辑。

我对Show所做的(因为只有一个)只是在 View Page 上调用 <%= @user.clip %> 。

这意味着用户上传的每个剪辑都会出现在节目中。

哪个是错的...

既然我有一个节目和一个专辑,我必须让用户能够选择附加它的位置(在他拥有的众多专辑之一或他的节目上)。

或者我应该使用用户可以通过专辑显示控制器上传剪辑的解决方案(而不是通过单独的剪辑控制器

我真的需要一些帮助:)

4

2 回答 2

1

您的问题 #1 是多态关联的教科书案例。

class User < ActiveRecord::Base
  has_one         :show,
                  :dependent => :destroy
  has_many        :clips,
                  :dependent => :destroy
  has_many        :albums,
                  :dependent => :destroy
end

class Clip < ActiveRecord::Base
  belongs_to      :user
  belongs_to      :attachable,
                  :polymorphic => true
end

class Show < ActiveRecord::Base
  belongs_to      :user
  has_many        :clips,
                  :as => :attachable
end

class Album < ActiveRecord::Base
  belongs_to      :user
  has_many        :clips,
                  :as => :attachable
end

您可以在Rails Guides了解更多关于多态关联的信息。

现在对于您的问题 #2,假设您按照上面链接的指南进行迁移,您的clips表中将有两个数据库字段:

  • attachable_id- 这是将要接收关联的或id实例的。ShowAlbum
  • attachable_type- 这是目标对象的类名,所以要么Show要么Album

在您的上传表单中,您将显示节目和/或专辑列表,并将idtoattachable_id和类名分配给attachable_type.

我建议只用一个类加载您的初始选择,然后通过 JavaScript 替换其内容,以防用户选择第二个选项。像这样:

<%= f.collection_select :attachable_type, [['Show'], ['Album']], :first, :first, { :selected => 'Show' }, { :include_blank => false } %>
<%= f.collection_select :attachable_id, Show.all, :id, :name %>
于 2013-09-15T14:20:33.267 回答
0

我认为除非出于某种原因,它们都必须属于用户,否则您可以通过更好地利用clip模型来简化这一点。

将您的关系更改为:

用户.rb

has_many :clips, dependent: :destroy

剪辑.rb

belongs_to :user
has_one :show
has_many :albums

显示.rb

belongs_to :clip

专辑.rb

belongs_to :clip

您可以使用查看节目clip.show和使用专辑clip.albums- 可以使用调用单个专辑clip.albums.find(params[:id])

于 2013-09-14T12:55:45.520 回答