除非获得批准,否则停止创建帖子

时间:2013-10-24 10:10:42

标签: ruby-on-rails validation

下午全部,

我有一个名为snippet.rb的模型,我希望一次只能有一个用户发布,直到获得批准。

我会将其作为自定义验证或snippet.rb中的after_create运行。

步骤流程如下:

  • 用户创建代码段
  • 提交审批的代码段
  • 在上一个代码段获得批准之前,不能创建其他代码段。

有人可以帮助我,或指出我如何做到这一点的文件。

始终感谢您的帮助。我正试图在脑海中解决这个问题,但找不到任何帮助。

4 个答案:

答案 0 :(得分:2)

你的snippets_controller.rb

中的

before_filter :check_last_snippet, :only => [:create]

private
def check_last_snippet
  redirect_to root_path unless Snippet.last.approved?
end

答案 1 :(得分:0)

我相信您应该使用自定义验证。

例如

validate :verify_for_not_approved_snippets

def verify_for_not_aproved_posts
  errors.add(:base, "error message") if "your condition here"
end

更详细地说,您可以在http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

阅读

答案 2 :(得分:0)

在您的用户模型中创建一个方法,并在创建代码段

之前调用此方法
def check_snippet
  return true if user.snippets.blank? || (user.snippets.present? && user.snippets.where(approved: true).size > 1)
end

如果此方法返回true,则只有用户可以再次发布片段。它可能对你有帮助。

答案 3 :(得分:0)

您可以在创建时使用验证,

 validate :check_last_snippet_approved, :on => :create      

 def check_last_snippet_approved
   errors.add(:base, "could not add due to last snippet not approved") if !self.last.nil? && self.last.approved ==  false
 end