Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails中为播放列表建模_Ruby On Rails_Ruby_Playlist - Fatal编程技术网

Ruby on rails 如何在Rails中为播放列表建模

Ruby on rails 如何在Rails中为播放列表建模,ruby-on-rails,ruby,playlist,Ruby On Rails,Ruby,Playlist,我正在为一家我创办的唱片公司创建一个网站 现在,我有一个工作的艺术家与验证用户模型。我现在需要为艺术家创造一种方法,用他们的歌曲创建一个播放列表。我还需要这首音乐为每个人下载 这是我的想法: 创建唱片集模型和歌曲模型 class Album < ActiveRecord::Base belongs_to :artist has_many :songs end class Song < ActiveRecord::Base belongs_to :album end 艺

我正在为一家我创办的唱片公司创建一个网站

现在,我有一个工作的艺术家与验证用户模型。我现在需要为艺术家创造一种方法,用他们的歌曲创建一个播放列表。我还需要这首音乐为每个人下载

这是我的想法:

创建唱片集模型和歌曲模型

class Album < ActiveRecord::Base
  belongs_to :artist
  has_many :songs
end

class Song < ActiveRecord::Base
  belongs_to :album
end
艺术家将使用唱片集窗体创建唱片集。然后,他们将以单独的形式创作一首属于某张专辑的歌曲。他们会将每首歌分别添加到一张专辑中,因此如果一张专辑中有10首歌,他们会填写10次歌曲表单

在“艺术家秀”页面上,我可以调用艺术家的专辑来显示属于该专辑的歌曲列表。这些歌曲将通过某种播放器播放。然后,当一个未登录的用户点击下载按钮时,他们会被带到一个下载页面,在那里他们可以下载一个.zip文件的专辑,其中的歌曲被很好地打包

我希望这是非常类似的方式班德坎普做它


我该怎么做呢?或者至少开始吧?

您可能会想做这样的事情:

-

管理员

首先,你需要一个管理区

这将是您的艺术家可以上传他们的歌曲/专辑的地方,允许您为此人创建一个经过身份验证的区域。要做到这一点实际上非常简单:

#config/routes.rb
namespace :admin do
   root: "albums#index"
   resources :albums, except: :show
end
resources :albums, only: [:index, :show]

#app/controllers/albums_controller.rb
class Admin::AlbumsController < ApplicationController
   before_action :authenticate_user!

   def index
      @albums = Album.all
   end

   def new
      @album = Album.new
      @album.songs.build
   end

   def create
      @album = Album.new album_params
      @album.save
   end

   private

   def album_params
     params.require(:album).permit(:your_album_params, songs_attributes: [:songs, :attributes])
   end
end
-

推荐

前端用户下载应用程序的一部分是最容易实现的

基本上,您需要制作一个控制器来管理下载,然后确保已设置流以使其正常工作:

#app/controllers/albums_controller.rb -> notice no "admin" folder?
class AlbumsController < ApplicationController
   def index
      @albums = Album.all
   end

   def show
      @album = Album.find params[:id]
   end
end

然而,如前所述,您可能最适合考虑a-IE方面的事情,即您的用户/数据将如何在应用程序中移动。这将为您提供一个逐步解决所面临问题的过程,从而为您提供更有力的问题/答案

一次只需一步。你有一个很好的起点和一条很好的逻辑路径。毫无疑问,你会遇到障碍,但在我们帮助你完成第28步之前,你需要执行步骤1-10。Rich显然有一个深思熟虑的好答案,但我想提供一个建模建议:如果你认为在未来的任何时候,一首歌可能属于多张专辑,您可能想考虑在歌曲模型上使用Hasyand NothSuthtoTy-多关系。使用“所属”,这并没有什么错,这意味着如果一首歌曲出现在“热门歌曲”专辑和它的原始专辑中,你最终会得到被复制的数据。对你来说可能不是问题,但我想我会注意到的。
#app/views/admin/albums/new.html.erb
<%= form_for @album do |f| %>
   <%= f.fields_for :songs do |s| %>
      <%= s.text_field :name %>
   <% end %>
   <%= f.submit %>
<% end %>
#app/controllers/albums_controller.rb -> notice no "admin" folder?
class AlbumsController < ApplicationController
   def index
      @albums = Album.all
   end

   def show
      @album = Album.find params[:id]
   end
end