ruby-on-rails 如何限制创建投票

yrefmtwq  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(166)

我有一个模块,我可以创建民意调查,管理员用户填写调查的网址及其到期日的表格,目标是,如果我已经创建1民意调查和到期日尚未满足不允许我创建其他一个.
我做了一个简单的脚手架

rails g scaffold poll name url expiration_date:date

这就是我现在所知道的。

validates :poll_existence

    def poll_existence
        if self.expiration_date.present?
            if self.expiration_date >= Date.today
                errors.add(:base, "a message")
            end
        end
    end

我尝试了一个验证方法,它传递了条件,但它对所有的操作都有效,所以它不允许我创建任何投票。

gcxthw6b

gcxthw6b1#

如果我理解的话,你的验证是如果已经有一个投票没有过期,管理员不能创建另一个投票,明白吗?
如果我是你我会这么做
1.为正在进行的轮询创建范围:

class Poll < ApplicationRecord
  scope :ongoing , -> { where('expiration_date > ?', Time.zone.now) }
end

1.对于验证:

validates :poll_existence, on: :create

def poll_existence
  if Poll.ongoing.exists?
    errors.add(:base, "Already have a poll")
  end
end
qv7cva1a

qv7cva1a2#

您没有检查来自父模型的其他轮询。假设父模型为"用户

validate :poll_existence

def poll_existence
    if self.expiration_date.present?
        if self.user.polls.where("DATE(expiration_date) > DATE(?)", Date.today).any?
            errors.add(:base, "a message")
        end
    end
end

应该起作用

相关问题