我有一个关于如何在Rails中构建模型的问题。让我们举例说一下社交网络tumblr。你可以用不同的方式发布。链接,只是文字,照片,对话。现在我想做类似的事情,但我对我的应用程序的建模有点兴趣。我们想说我想要一个Post
模型。所以我的用户可以发布一个文本或一个带图像的文本。所以我想我也需要一个Image
模型。让我们说我希望我的用户可以发布一个事件,但作为帖子的一种形式。所以我想我需要一个Event
模型。等等,也许将来我会对另一种类型的帖子有另一种想法(因此它应该总是与帖子相关)。你将如何建立模型和关系,以便它可以轻松扩展?我正在考虑使用Java中的 Enums 。
答案 0 :(得分:0)
我会为所有帖子的类型使用一个模型Post
(图片,事件...)
例如posts
表:
create_table :posts do |t|
t.belongs_to :author
t.column :post_type, :integer, default: 0
t.column :title, :string
t.column :body, :text
t.column :image_url, :string
t.column :star_at, :datetime
t.column :end_at, :datetime
t.timestamps
end
模型将针对每种帖子类型进行特定验证:
class Post < ActiveRecord::Base
enum post_type: [ :event, :image, :message]
validates :image_url, presence: true, if: ->{ image? }
validates :start_at, :end_at, presence: true, if: ->{ event? }
validates :title, :body, presence: true, if: ->{ message? }
end
选择这种方式的原因: