Rumah > pangkalan data > tutorial mysql > Bagaimana untuk membangunkan fungsi cadangan muzik mudah menggunakan MySQL dan Ruby on Rails

Bagaimana untuk membangunkan fungsi cadangan muzik mudah menggunakan MySQL dan Ruby on Rails

WBOY
Lepaskan: 2023-09-21 14:45:43
asal
733 orang telah melayarinya

如何使用MySQL和Ruby on Rails开发一个简单的音乐推荐功能

Cara menggunakan MySQL dan Ruby on Rails untuk membangunkan fungsi cadangan muzik yang ringkas, contoh kod khusus diperlukan

Dengan pengembangan berterusan pasaran muzik dan kepelbagaian muzik yang semakin meningkat, adalah sukar bagi pengguna untuk mencari muzik yang menepati citarasa mereka. Oleh itu, adalah sangat perlu untuk membangunkan fungsi cadangan muzik. Artikel ini akan menggunakan pangkalan data MySQL dan rangka kerja Ruby on Rails sebagai asas untuk memperkenalkan cara membangunkan fungsi cadangan muzik mudah dan menyediakan contoh kod khusus.

Langkah Pertama: Cipta Pangkalan Data
Pertama, kita perlu mencipta pangkalan data MySQL untuk menyimpan data muzik dan pilihan pengguna. Berikut ialah contoh fail migrasi Rails untuk membuat jadual pangkalan data:

class CreateSongs < ActiveRecord::Migration[6.0]
  def change
    create_table :songs do |t|
      t.string :title
      t.string :artist
      t.string :genre
    end
  end
end

class CreateUserPreferences < ActiveRecord::Migration[6.0]
  def change
    create_table :user_preferences do |t|
      t.references :user
      t.references :song
      t.integer :rating
    end
  end
end
Salin selepas log masuk

Kod di atas mencipta dua jadual: lagu digunakan untuk menyimpan maklumat muzik, termasuk title ( Tajuk lagu ), artis (artis) dan genre (genre muzik); user_preferences digunakan untuk menyimpan rating pengguna untuk setiap lagu. songs用于存储音乐信息,包括title(歌曲标题)、artist(艺术家)和genre(音乐类型);user_preferences用于存储用户对每首歌曲的评分。

第二步:模型关系和数据填充
在Rails中,我们需要定义模型之间的关系。以下是示例的模型代码:

class Song < ApplicationRecord
  has_many :user_preferences
  has_many :users, through: :user_preferences
end

class User < ApplicationRecord
  has_many :user_preferences
  has_many :songs, through: :user_preferences
end

class UserPreference < ApplicationRecord
  belongs_to :user
  belongs_to :song
end
Salin selepas log masuk

以上代码定义了SongUserUserPreference 之间的关系。SongUser 之间是多对多关系,通过 UserPreference 来建立联系。

接下来,我们需要填充一些样本数据进入数据库。以下是一个示例的填充代码:

Song.create(title: 'Song 1', artist: 'Artist 1', genre: 'Pop')
Song.create(title: 'Song 2', artist: 'Artist 2', genre: 'Rock')
Song.create(title: 'Song 3', artist: 'Artist 3', genre: 'Jazz')

User.create(name: 'User 1')
User.create(name: 'User 2')
User.create(name: 'User 3')

UserPreference.create(user_id: 1, song_id: 1, rating: 4)
UserPreference.create(user_id: 1, song_id: 2, rating: 5)
UserPreference.create(user_id: 2, song_id: 2, rating: 3)
UserPreference.create(user_id: 3, song_id: 3, rating: 2)
Salin selepas log masuk

以上代码创建了3首歌曲、3个用户和4个用户偏好示例(用户对歌曲的评分)。

第三步:实现音乐推荐算法
接下来,我们需要实现一个简单的音乐推荐算法。以下是一个示例的推荐算法:

class RecommendationController < ApplicationController
  def index
    user = User.find(params[:user_id])
    rated_songs = user.songs
    similar_users = User.where.not(id: user.id).joins(:songs)
                   .where('songs.id IN (?)', rated_songs.pluck(:id)).distinct
    recommended_songs = similar_users.joins(:songs).where.not('songs.id IN (?)', rated_songs.pluck(:id))
                       .group(:song_id).average(:rating)
    @recommendations = Song.where(id: recommended_songs.keys)
                       .order(recommended_songs.values.map(&:to_f).reverse)
  end
end
Salin selepas log masuk

以上代码定义了一个RecommendationsController 控制器,其中index 方法根据用户的偏好(即对歌曲的评分)计算相似用户和推荐的歌曲,并将结果存储在 @recommendations

Langkah Kedua: Perhubungan Model dan Populasi Data

Dalam Rails, kita perlu menentukan hubungan antara model. Berikut ialah kod model untuk contoh:

<h1>Recommendations for User <%= @user.name %></h1>

<% @recommendations.each do |song| %>
  <p><%= song.title %></p>
  <p>Artist: <%= song.artist %></p>
  <p>Genre: <%= song.genre %></p>
<% end %>
Salin selepas log masuk
Kod di atas mentakrifkan hubungan antara Lagu, User dan UserPreference. Terdapat hubungan banyak-ke-banyak antara Lagu dan User, dan hubungan itu diwujudkan melalui UserPreference.

Seterusnya, kita perlu mengisi beberapa sampel data ke dalam pangkalan data. Berikut ialah kod mengisi untuk contoh:

rrreee
Kod di atas mencipta 3 lagu, 3 pengguna dan 4 contoh pilihan pengguna (penilaian pengguna lagu).

🎜Langkah 3: Laksanakan algoritma pengesyoran muzik🎜Seterusnya, kita perlu melaksanakan algoritma pengesyoran muzik yang mudah. Berikut ialah contoh algoritma pengesyoran: 🎜rrreee🎜Kod di atas mentakrifkan pengawal RecommendationsController, di mana kaedah index mengira persamaan berdasarkan pilihan pengguna (iaitu, penilaian lagu ) pengguna dan lagu yang disyorkan, dan menyimpan hasilnya dalam pembolehubah @recommendations. 🎜🎜Langkah 4: Buat paparan🎜Langkah terakhir ialah mencipta paparan untuk memaparkan lagu yang disyorkan. Berikut ialah contoh kod paparan mudah: 🎜rrreee🎜Kod di atas memaparkan senarai lagu yang disyorkan kepada pengguna. 🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan langkah-langkah untuk membangunkan fungsi cadangan muzik ringkas menggunakan MySQL dan Ruby on Rails. Daripada mencipta pangkalan data dan mengisi data, kepada menentukan perhubungan model dan melaksanakan algoritma pengesyoran, kepada mencipta paparan untuk memaparkan hasil. Semoga contoh mudah ini akan membantu pembaca memahami cara membangunkan fungsi cadangan muzik menggunakan MySQL dan Ruby on Rails. 🎜

Atas ialah kandungan terperinci Bagaimana untuk membangunkan fungsi cadangan muzik mudah menggunakan MySQL dan Ruby on Rails. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan