我是RoR的新手;我想创建以下语句。我有一个数组;如果不是所有数组元素都等于一个变量,我希望控制器返回false。value.This是代码
def check_warehouse(asset,serial)
wh = Warehouse.where(["(asset = ? and serial = ?) OR (asset = ?) OR (serial= ?)",asset,serial,asset,serial])
return false if wh.count > 1
return false if
wh.each do |wh|
wh.position_id != session[:position_id]
end
end但是它不起作用!为什么?
此外,你能推荐一个运行在Rails3.1上的插件或gem来从RoR数据生成pdf吗?谢谢大家
发布于 2012-02-08 23:44:53
像这样尝试smth:
def check_warehouse(asset,serial)
wh = Warehouse.where(["(asset = ?) OR (serial= ?)",asset,serial]) # first condition was just extra
return false if wh.detect {|wh| wh.position_id != session[:position_id] }
end我删除了return false if wh.count > 1,因为如果返回的数组包含超过1个元素,那么检查数组是没有意义的。如果我误解了你,请告诉我
更新
实际上,您可以在db中这样做:
def check_warehouse(asset,serial)
Warehouse.where(
["(asset = ? OR serial= ?) AND NOT position_id = ?", asset, serial, session[:position_id]]
).count.zero?
end发布于 2012-02-08 23:45:57
你有这样的代码:
return false if wh.each do |wh|
wh.position_id != session[:position_id]
end这将不会以您想要的方式执行。在ruby中,.each将执行“块”(do/end之间的代码)并返回给你原始的数组。
因此,如果wh是一个数组,不管是否为空,您都可以这样说:
return false if []ruby不会返回false。相反,你可能更倾向于:
return false if wh.any? {|wh| wh.position_id != session[:position_id] }如果位置是会话位置,您可能希望它返回true,因此您可以切换到:
return wh.any?{|wh| wh.position_id == session[:position_id] }https://stackoverflow.com/questions/9196372
复制相似问题