在Rails中使用不同类型的模型帖子

时间:2016-12-10 16:53:15

标签: ruby-on-rails

我有一个关于如何在Rails中构建模型的问题。让我们举例说一下社交网络tumblr。你可以用不同的方式发布。链接,只是文字,照片,对话。现在我想做类似的事情,但我对我的应用程序的建模有点兴趣。我们想说我想要一个Post模型。所以我的用户可以发布一个文本或一个带图像的文本。所以我想我也需要一个Image模型。让我们说我希望我的用户可以发布一个事件,但作为帖子的一种形式。所以我想我需要一个Event模型。等等,也许将来我会对另一种类型的帖子有另一种想法(因此它应该总是与帖子相关)。你将如何建立模型和关系,以便它可以轻松扩展?我正在考虑使用Java中的 Enums

1 个答案:

答案 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

选择这种方式的原因:

  • 轻松从数据库中获取所有数据。没有工会,没有多重选择。
  • 轻松管理缓存,所有者的规则,......
  • 对每种帖子类型使用模型的关注点以获得干净的模型。