首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Return false语句

Return false语句
EN

Stack Overflow用户
提问于 2012-02-08 23:33:34
回答 2查看 1.6K关注 0票数 0

我是RoR的新手;我想创建以下语句。我有一个数组;如果不是所有数组元素都等于一个变量,我希望控制器返回false。value.This是代码

代码语言:javascript
复制
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吗?谢谢大家

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-08 23:44:53

像这样尝试smth:

代码语言:javascript
复制
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中这样做:

代码语言:javascript
复制
def check_warehouse(asset,serial)
  Warehouse.where(
    ["(asset = ? OR serial= ?) AND NOT position_id = ?", asset, serial, session[:position_id]]
  ).count.zero?
end
票数 2
EN

Stack Overflow用户

发布于 2012-02-08 23:45:57

你有这样的代码:

代码语言:javascript
复制
return false if wh.each do |wh|
  wh.position_id != session[:position_id]                    
end

这将不会以您想要的方式执行。在ruby中,.each将执行“块”(do/end之间的代码)并返回给你原始的数组。

因此,如果wh是一个数组,不管是否为空,您都可以这样说:

代码语言:javascript
复制
return false if []

ruby不会返回false。相反,你可能更倾向于:

代码语言:javascript
复制
return false if wh.any? {|wh| wh.position_id != session[:position_id] }

如果位置是会话位置,您可能希望它返回true,因此您可以切换到:

代码语言:javascript
复制
return wh.any?{|wh| wh.position_id == session[:position_id] }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9196372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档