这是正确的设置方式吗?有多个关联?

时间:2010-04-22 22:51:04

标签: ruby-on-rails

我正在尝试为音乐网站设置一个新项目。我正在学习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

2 个答案:

答案 0 :(得分:1)

几件事:

简短版本:

  1. 加入表格应按字母顺序排列(例如create_table :comments_users
  2. 这只是设置关联的一半。我也希望看到您的型号代码
  3. 您的评论模型应设置为与其他人的多态关联。
  4. 长版:

    1. 设置联接表(例如用户和评论)时,您希望按字母顺序排列。这样用户/评论表实际上是create_table :comments_users。理想情况下,您可能希望为此连接表设置一个更有意义的名称(因为它是一个模型 - 见下文),但这是您的通话。
    2. 请记住,您必须为这些:has_many through关联创建模型。大多数连接表都可以使用:has_and_belongs_to_many创建,但是对于将来的扩展,也可以使用:has_many through方法。在模型文件中提供关联代码也是明智的 - 与创建表一样重要。
    3. 对于评论,请考虑多态关系。这是因为它所属的所有不同表中的注释是相同的。这样做是在多态连接表中查找一个类型列,并告诉它记录(即注释)属于哪个表。
    4. 启动资源:

      查看Ryan关于这个主题的精彩(如常)Railscast:
      http://railscasts.com/episodes/47-two-many-to-many

      另外,关于多态性:
      http://railscasts.com/episodes/154-polymorphic-association

      http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:0)

看起来不错。你似乎在所有正确的地方都有ID。

虽然有几点意见:

进行许多小型迁移通常更容易。我通常会单独创建每个模型和迁移。然后,您可以与测试一起开始构建模型关系,以确保实际实现业务需求。

你有一些测试,对吗? :)