Rails - 创建受保护的默认类别

时间:2013-07-23 09:23:05

标签: ruby-on-rails ruby

我想为我的帖子创建一个特殊类别,这是默认的,有三个不同的功能:

  1. 默认情况下会为每个创建的帖子分配
  2. 在销毁其父类
  3. 后,将其分配给相关帖子
  4. 任何人都不会删除
  5. 所以第一点很容易实现,因此我不会在这里专注于

    第二点更令人费解。我猜这样的东西应该进入我的分类模型:

    before_destroy :move_dependent_posts
    
    def move_dependent_posts
      #no idea what goes here
    end
    

    与第三点相同的问题:我必须检查,如果要删除的类别的id为1,那么之后会抛出错误?

    before_destroy :protect_default_category
    
    def protect_default_category
      return false if category.id(5) #won't work, of course
    end
    

3 个答案:

答案 0 :(得分:2)

第2点:

before_destroy :move_dependent_posts

def move_dependent_posts
  default_category = Category.default_category # find default category here
  posts.each { |post| post.update_attribute(:category, default_category) }
end

第3点:

before_destroy :protect_default_category

def protect_default_category
  throw "Default category can't be deleted" if id == 1
end

答案 1 :(得分:1)

好吧,如果你想要的只是一个默认类别,我正在考虑像这样实现它:

class Post
  def category
    super || Category.default
  end
end

class Category
  def default
    Category.find_or_create_by(name: 'Default')
  end
end
  1. 每个没有category_id列的帖子都被视为默认类别。因此,您无需担心在创建帖子或从帖子中删除类别时分配类别。
  2. 默认类别可以被销毁。但每当你打电话给Category.default时,它都会再次被创建。所以,它实际上没有伤害,是吗?

答案 2 :(得分:0)

对于第2点

before_destroy :move_dependent_posts

def move_dependent_posts
  @posts = Post.where(category: "Category to be Deleted")
  @posts.each { |post| post.update_attribute(:category, "Default Category") }
end