0

我希望用户能够创建一个“注释”,其中包含多个文本字段、图像、图表等内容。(就像学校的笔记本一样)

我正在创建这些模型:

  • 用户
  • 笔记
  • 图片
  • 图形
  • 文本

    class User < ActiveRecord::Base    
      belongs_to :note
      has_many :notes
    end  
    
    class Note < ActiveRecord::Base
      has_one :user
      has_many :graphs
      has_many :images
    end
    
    class Graph < ActiveRecord::Base    
      belongs_to :note
    end  
    
    class Image < ActiveRecord::Base
      has_one :note
    end
    
    class Text < ActiveRecord::Base
      has_one :note
    end
    

我会用每个表的 id 连接表,如 note_graph、note_image 等吗?

用户可以有很多笔记,但笔记只能有一个用户(任何人都可以查看)。

我希望文本和其他内容包含在注释中。

请帮助:S

4

1 回答 1

0

我建议为此使用多态关联

Note模型将属于Graph, Image,Text在单个notable关联上并且也属于User.

然后,您的模型定义将定义如下:

class User < ActiveRecord::Base    
  has_many :notes
end  

class Note < ActiveRecord::Base
  belongs_to :notable, polymorphic: true
  belongs_to :user
end

class Graph < ActiveRecord::Base    
  has_many :notes, as: :notable
end  

class Image < ActiveRecord::Base
  has_many :notes, as: :notable
end

class Text < ActiveRecord::Base
  has_many :notes, as: :notable
end

您的迁移Note将类似于:

class CreateNotes < ActiveRecord::Migration
  def change
    create_table :notes do |t|
      t.integer :notable_id
      t.string  :notable_type
      t.timestamps
    end
  end
end

注意这两列,notable_idnotable_typenotable_type将保存Graph,ImageText类名之一作为字符串,notable_id并将保存相应类的id.

Users并且Notes关联只是“用户有很多笔记”和“笔记属于用户”。

于 2013-08-23T02:19:29.847 回答