Ich möchte Songs hinzufügen, die bereits von Künstlern in eine Benutzerbibliothek hochgeladen wurden (ich habe meine App bereits eingerichtet, damit Künstler Songs hochladen können). Außerdem habe ich meinen Code so eingerichtet, dass eine leere Benutzerbibliothek erstellt wird, nachdem sich ein Benutzer angemeldet hat (mit dem after_create Active Record Callback).So fügen Sie einer Musikbibliothek vorhandene Titel hinzu Rails 4
Um klarer zu sein, möchte ich für den Benutzer in der Lage sein, Lieder, die sie innerhalb der Website sehen, zu ihrer Bibliothek hinzuzufügen.
Allerdings entkommt dies mir. Ich bin mit CRUD vertraut und habe eine Idee, wie ich eine Bibliothek erstellen und vorhandene Songs hinzufügen würde, aber ich bin mir nicht sicher, wie ich einen Song zu einer Benutzerbibliothek hinzufügen könnte, indem ich auf einen Button/Link "Add Song To" klicke Bibliothek ", die sich neben einem Lied befinden würde, und das Hinzufügen zur vorhandenen leeren Bibliothek des Benutzers.
Mein bestehender Code ist unten.
User.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :meta, polymorphic: true
before_create :create_empty_profile
after_create :create_empty_library #may not be the best way to do it ¯\_(ツ)_/¯
acts_as_messageable
has_many :playlists
has_many :user_friendships, dependent: :destroy
has_many :friends, -> { where(user_friendships: { state: 'accepted'}) }, through: :user_friendships
has_many :pending_user_friendships, -> { where ({ state: 'pending' }) }, class_name: 'UserFriendship', foreign_key: :user_id
has_many :pending_friends, through: :pending_user_friendships, source: :friend
has_many :chat_rooms, dependent: :destroy
has_many :chat_messages, dependent: :destroy
has_many :votes, dependent: :destroy
mount_uploader :profile_pic, ProfilePicUploader
def mailboxer_name
self.name
end
def mailboxer_email(object)
self.email
end
def admin?
role == 'admin'
end
def moderator?
role == 'moderator'
end
def create_empty_profile
if is_artist?
profile = ArtistProfile.new
else
profile = UserProfile.new
end
profile.save(validate: false)
self.meta_id = profile.id
self.meta_type = profile.class.name
end
def create_empty_library
library = Library.new
library.user_id = self.id
library.save(validate: false)
end
end
Library.rb:
class Library < ActiveRecord::Base
belongs_to :user
has_many :library_songs
has_many :songs, through: :library_songs
has_many :library_albums
has_many :albums, through: :library_albums
end
library_song.rb
class LibrarySong < ActiveRecord::Base
belongs_to :library
belongs_to :song
end
library_album.rb
class LibraryAlbum < ActiveRecord::Base
belongs_to :library
belongs_to :album
end
libraries_controller.rb
class LibrariesController < ApplicationController
def index
@libraries = Library.all
end
def show
@library = Library.find(params[:id])
end
end
war ich in der Lage, Wiedergabelisten zu erstellen und unter Songs, um sie mit dem Formular/Controller hinzuzufügen.
Wiedergabelisten/new.html.erb:
<h1>New Playlist</h1>
<%= form_for(@playlist) do |f| %>
<%= f.text_field :name %>
<% Song.all.each do |song| -%>
<div>
<%= check_box_tag :song_ids, song.id, false, :name => 'playlist[song_ids][]', id: "song-#{song.id}" %>
<%= song.name %>
</div>
<% end %>
<%= f.submit %>
<% end %>
playlists_controller.rb:
class PlaylistsController < ApplicationController
def index
@playlists = Playlist.all
end
def show
@playlist = Playlist.find(params[:id])
end
def new
@playlist = Playlist.new
end
def create
@playlist = Playlist.create(playlist_params)
redirect_to @playlist
end
private
def playlist_params
params.require(:playlist).permit(:name, song_ids: [])
end
end
Allerdings ist das Hauptproblem, dass oben in der Form wird die Playlist mit den erzeugten entlang wobei bestehende Lieder. In diesem Fall müsste ich vorhandene Songs zu einer bestehenden Bibliothek hinzufügen, die leer ist.
Irgendwelche Ideen, Leute? Dies wäre sehr hilfreich. Ich würde gerne den benötigten Code hochladen.
Ich verstehe nicht ganz, was Sie meinen 'Die Playlist wird zusammen mit den vorhandenen Songs erstellt. In diesem Fall müsste ich vorhandene Titel zu einer vorhandenen leeren Bibliothek hinzufügen. – oreoluwa
Im Formular "Wiedergabelisten/new.html.erb" erstelle ich eine Wiedergabeliste und wähle die Titel aus, die gleichzeitig zur Wiedergabeliste hinzugefügt werden sollen . Ich müsste in der Lage sein, einen vorhandenen Song zu einer Bibliothek hinzuzufügen, die bereits zuvor erstellt wurde. (Wenn sich ein Benutzer anmeldet, wird eine Bibliothek erstellt, die jedoch leer ist). Sobald der Benutzer die Site durchsucht hat, sollte er in der Lage sein, Songs, die er auf der Site sieht, derselben Bibliothek hinzuzufügen. – user3700231
vertauschen Sie die Verwendung von 'Playlisten' und' Bibliothek'? – oreoluwa