1

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

  1. 它默认分配给每个创建的帖子
  2. 它在其父类别被销毁时分配给相关职位
  3. 任何人都保护它不被删除

所以第一点很容易实现,这里就不重点讲了

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

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
4

3 回答 3

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
于 2013-07-23T09:30:24.427 回答
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时,它都会再次创建。所以,它实际上并没有伤害,不是吗?
于 2013-07-23T09:37:05.510 回答
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
于 2013-07-23T09:31:46.250 回答