我正在尝试为音乐网站设置一个新项目。我正在学习ROR并且对如何制作连接模型/表格感到有点困惑。这看起来不错吗?
我有用户,播放列表,歌曲和评论。用户可以拥有多个播放列表。用户可以对其个人资料发表多条评论。播放列表可以有多首歌曲。播放列表可以有评论。歌曲可以有评论。
class CreateTables < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :login
t.string :email
t.string :firstname
t.string :lastname
t.timestamps
end
create_table :playlists do |t|
t.string :title
t.text :description
t.timestamps
end
create_table :songs do |t|
t.string :title
t.string :artist
t.string :album
t.integer :duration
t.string :image
t.string :source
t.timestamps
end
create_table :comments do |t|
t.string :title
t.text :body
t.timestamps
end
create_table :users_playlists do |t|
t.integer :user_id
t.integer :playlist_id
t.timestamps
end
create_table :playlists_songs do |t|
t.integer :playlist_id
t.integer :song_id
t.integer :position
t.timestamps
end
create_table :users_comments do |t|
t.integer :user_id
t.integer :comment_id
t.timestamps
end
create_table :playlists_comments do |t|
t.integer :playlist_id
t.integer :comment_id
t.timestamps
end
create_table :songs_comments do |t|
t.integer :song_id
t.integer :comment_id
t.timestamps
end
end
def self.down
drop_table :users
drop_table :playlists
drop_table :songs
drop_table :comments
drop_table :users_playlists
drop_table :users_comments
drop_table :playlists_comments
drop_table :songs_comments
end
end
答案 0 :(得分:1)
create_table :comments_users
create_table :comments_users
。理想情况下,您可能希望为此连接表设置一个更有意义的名称(因为它是一个模型 - 见下文),但这是您的通话。 :has_many through
关联创建模型。大多数连接表都可以使用:has_and_belongs_to_many
创建,但是对于将来的扩展,也可以使用:has_many through
方法。在模型文件中提供关联代码也是明智的 - 与创建表一样重要。
查看Ryan关于这个主题的精彩(如常)Railscast:
http://railscasts.com/episodes/47-two-many-to-many
另外,关于多态性:
http://railscasts.com/episodes/154-polymorphic-association
答案 1 :(得分:0)
看起来不错。你似乎在所有正确的地方都有ID。
虽然有几点意见:
进行许多小型迁移通常更容易。我通常会单独创建每个模型和迁移。然后,您可以与测试一起开始构建模型关系,以确保实际实现业务需求。
你有一些测试,对吗? :)