0

下午所有,

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

我会将其作为自定义验证运行还是after_create在 snippet.rb 中运行。

步骤过程如下:

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

有人可以帮助我或指出一些有关如何执行此操作的文档的方向。

永远感谢您的帮助。我正在努力解决这个问题,但找不到任何帮助。

4

4 回答 4

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
于 2013-10-24T10:41:08.687 回答
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阅读更多详细信息

于 2013-10-24T10:23:59.557 回答
0

在您的用户模型中创建一个方法并在创建代码段之前调用此方法

def check_snippet
  return true if user.snippets.blank? || (user.snippets.present? && user.snippets.where(approved: true).size > 1)
end

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

于 2013-10-24T10:31:44.367 回答
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
于 2013-10-24T10:32:33.173 回答