2014-09-17 3 views
-1

내가 시작하는 레코드 회사 웹 사이트를 만들고 있습니다.레일에서 재생 목록 모델링하는 방법

지금은 유효성이있는 작업 아티스트 (사용자) 모델이 있습니다. 이제 아티스트가 노래로 재생 목록을 만드는 방법을 만들어야합니다. 또한이 음악을 모든 사람이 다운로드 할 수 있어야합니다.

이 앨범의 모델과 노래 모델을 만들기 :

이 내 생각이다.

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

class Song < ActiveRecord::Base 
    belongs_to :album 
end 

아티스트는 앨범 양식을 사용하여 앨범을 만듭니다. 그런 다음 별도의 양식으로 특정 앨범에 속하는 곡을 만듭니다. 그들은 각각의 노래를 하나의 앨범에 별도로 추가 할 것이므로 한 앨범에 10 곡이 있다면 노래 양식을 10 번 작성합니다.

아티스트 쇼 페이지에서 아티스트 앨범을 불러서 해당 앨범에 속한 노래 목록을 표시 할 수 있습니다. 그 노래들은 어떤 종류의 플레이어를 통해 연주 될 것입니다. 그런 다음 로그인하지 않은 사용자가 다운로드 버튼을 클릭하면 다운로드 페이지로 이동하여 노래의 멋지게 꾸며진 앨범의 .zip 파일을 다운로드 할 수 있습니다.

저는 이것이 Bandcamp가하는 것과 매우 유사하기를 바랍니다.

어떻게해야합니까? 또는 적어도 시작 했습니까?

+4

을 한 번에 한 단계 씩 제공 할 수 있습니다. 당신은 좋은 출발점과 좋은 논리 경로를 가지고 있습니다. 의심의 여지 당신이 도로 블록을 칠거야하지만 당신은 우리가 28 단계와 함께 당신을 도울 수 전에 1-10 단계를 수행해야합니다. – Anthony

+0

리치 명확하게 잘 밖으로 좋은 대답을 가지고 있지만 하나의 모델 제안을 제공하고 싶었 : 당신이 생각한다면 노래가 하나 이상의 앨범에 속할 수있는 경우, 노래 모델에서 has_and_belongs_to_many 관계를 사용하는 것이 좋습니다 (http://guides.rubyonrails.org/association_basics.html#the-has-and). 많은 사람들과의 관계). belongs_to를 사용하면 아무 문제가 없습니다. 노래가 '가장 큰 히트 곡'앨범과 원래 앨범에서 끝나면 속는 데이터로 끝납니다. 당신에게 문제가되지는 않을지 모르지만 나는 그것을 메모 할 것이라고 생각했습니다. –

답변

2

당신은 아마 이런 식으로 뭔가를 할 것입니다 :

-

첫째

관리,

이 될 것입니다 당신이 관리 영역이 필요합니다 "아티스트"가 노래/앨범을 업로드하여 해당 사용자의 인증 된 영역을 만들 수 있습니다.

#app/models/artist.rb 
class Artist < ActiveRecord::Base 
    # devise code here 
end 

#app/models/album.rb 
class Album < ActiveRecord::Base 
    belongs_to :artist 

    has_many :songs 
    accepts_nested_attributes_for :songs 
end 

#app/models/song.rb 
class Song < ActiveRecord::Base 
    belongs_to :album 
end 

당신은 Devise의 좋아하는 인증해야 당신의 artist 모델에 적용하여이 적절한 모델을 백업해야합니다

#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 

이 실제로 매우 간단 수행 . 나는 그것에 대해 세부 사항으로 이동하지는 않지만, 당신이 this Railscast를 사용하여 최고의 수 있습니다 :

enter image description here

아주 좋은 자원 an amazing admin area in Rails can be found here

를 만드는 -

중첩는

속성

위의 모델에서 accepts_nested_attributes의 사용을 확인할 수 있습니다.

이 방법을 사용하면 모델을 통해 연관 양식 데이터를 전달할 수 있으므로 부모 양식 자체에 "하위"데이터를 캡처 할 수 있습니다.

너무 많은 세부 사항 (즉, 새로운 "관련"값을 추가하는 방법에 대해 자세히 설명하지 않음) 다음과 같이 앨범 양식의 "노래"부분을 렌더링해야합니다 (노래를 만드는 경우).

#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 

그러나, 당신은 아마 이야은 사용자/데이터가 애플리케이션을 통해 어떻게 움직일 것인지를 사용자가 생각하는 데 가장 적합 할 것입니다. flow - IE. 이를 통해 귀하가 직면 한 문제에 접근 할 수있는 단계별 절차가 제공되므로보다 확실한 질문/대답