Rails模型变量属性

时间:2014-05-14 10:22:18

标签: ruby-on-rails

我有模型Post,属于Category,像往常一样,Post有几个属性(例如title:string,content:text,...)。

类别的数量不会超过五个(现在只有3个),所以问题是:这是根据Post的类别添加一些属性的最佳方式。例如。如果Post属于category_1,那么它将有2个属性(attr_1,attr_2),如果Post属于category_2,那么它将具有初始属性+ 3以上(attr_3,attr_4,attr_5)。

我应该“硬编码”这个或者将字段添加到Post模型(例如类似JSON的字段additional_attributes)会更好吗?

示例:3个类别,3个帖子(每个类别中有一个帖子)。基本上,帖子有2个字段:标题,文本。但是,如果帖子属于category_1,它也应该有排名和历史记录,如果帖子属于category_2,它不应该有排名或历史,但应该有分数。

1 个答案:

答案 0 :(得分:0)

如果您只是将所有可能的属性添加到Post模型并创建条件验证器(取决于类别),我认为这可以很好地处理。

class Post < ActiveRecord::Base
  # This is always validated
  validates :title, presence: true

  # Validation for Posts with category type1
  with_options if: Proc.new { |p| a.category.type == 'type1' } do |post|
    post.validates :rank, length: { minimum: 10 }
    post.validates :history, presence: true
  end

  # Validation for Posts with category type2
  with_options if: Proc.new { |p| a.category.type == 'type2' } do |post|
    post.validates :extra_field, length: { maximum: 20 }
    post.validates :points, presence: true
  end
end

您应该根据自己的需要调整自己处理类别的方式。