Вы, вероятно, хотите сделать что-то вроде этого:
-
Админ
Во-первых, вам понадобится площадь администратора
Это будет где ваш «художник» может загружать свои песни/альбомы, что позволяет вам создать аутентифицированную область для этого человека. Для того, чтобы сделать это на самом деле довольно просто:
#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/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
модели , Несмотря на то, что я не буду вдаваться в подробности о том, что вы будете лучше всего с помощью this Railscast:
Очень хороший ресурс по созданию 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, как ваш пользователь/данные будут перемещаться по приложению. Это должно дать вам пошаговый процесс подхода к проблеме, с которой вы сталкиваетесь, тем самым предоставив вам более надежные вопросы/ответы
всего за один шаг за раз. У вас хорошая отправная точка и хороший логический путь. Без сомнения, вы столкнетесь с дорожными блоками, но вам нужно сделать шаги 1-10, прежде чем мы сможем помочь вам с шагом 28. – Anthony
Богатый отчет хорошо продумал и хороший ответ, но я хотел предложить одно предложение моделирования: если вы думаете, что в любой точке дороги песня может принадлежать более чем одному альбому, вы можете рассмотреть возможность использования отношений has_and_belongs_to_many в модели песни (http://guides.rubyonrails.org/association_basics.html#the-has-and -belongs-ко-многим-ассоциации). Используя свойство own_to, и нет ничего плохого в этом, означает, что если песня заканчивается альбомом «лучших хитов» и его оригинальным альбомом, вы получаете обдуманные данные. Возможно, это не проблема для вас, но я подумал, что я это заметлю. –