@tesla_lee @hging @jasl 我改成>=1 了,现在确实只能添加一条数据,我的逻辑是添加成功之后到 render 到 show,他却给出了提示 我的 create 代码大概如下:
begin
if @model.save!
.....
end
rescue Exception => e
render :show
end
意思就是第一条可以添加成功,但是他也给报这样的验证提示 从逻辑上分析,还是先走了 save!,然后再从验证判断。。。。。 补充一句:如果我写成>=1 的话,我添加第一条肯定会走 errors.add 啊
@jasl 首先 validate 确实执行了,我现在怀疑是我 if 条件的问题,可是感觉没问题啊,一个小时之内只能设置一条 send_date。我这有写真的没有看出毛病。。。。。。
validate :only_three_by_day
def only_three_by_day
if Notification::Send.where("send_date BETWEEN ? AND ? AND send_status != ?", send_date.beginning_of_day, send_date.end_of_day, 3).count > 3
errors.add(:id, "一天之内只能发3条!")
end
end
validate :only_one_by_hour
def only_one_by_hour
if Notification::Send.where("send_date BETWEEN ? AND ? AND send_status != ? ", send_date.beginning_of_hour, send_date.end_of_hour, 3).count > 1
errors.add(:id, "1个小时之内只能发1条哦!")
end
end
#3 楼 @easonlovewan 居然有 beginning_of_hour,感谢知道了
#2 楼 @small_fish__ 什么意思?
来个大神吧
#1 楼 @flowerwrong @huacnlee 我知道这个用法,其实我想问的是,当点击新建按钮时 render 到了 new 页面之后属性值已经做了判断 (这时候肯定是空的),重点是怎么在点击保存的时候重新判断我这个属性的 true 或者 false 来判断是否弹出 confirm,也就是我输入值之后在判断一次(二次判断) 如下: new.html.erb
<% status = @model.a.present? && @model.b.to_time <= DateTime.current %>
.....
<%= f.submit params[:action] == 'new' ? '保存' : '修改', data: { confirm: status ? "你确定提交吗?" : ""}, class: 'btn btn-info back_submit' %>
大概就是上边这样的逻辑,但是这样搞肯定不行的
一天内的任何一个小时最多只能发一条数据是这么写的
def only_two_by_hour
if self.class.where("send_date > ?", 1.hours.ago).count > 1
errors.add(:id, "1小时最多只能发2条!")
end
end
这样写好像不太对,求解
#1 楼 @michael0015 log 也看了,其它 worker 都执行了,只有这个 worker 没有执行
其实就想问一下,可能是什么情况下造成的
#5 楼 @suffering 非常感谢,已经有思路了
#2 楼 @suffering 首先感谢你的回答,不过还有两点疑问: 1,new 的时候怎么验证?写一个过滤器吗? 2,我其实想问的是在一天内的任何一个小时不能创建超过两条数据,这个 validate 怎么写?
#6 楼 @tesla_lee ok
可还是不对啊,content.to_json 之后还是和之前一样