我有一个模型咖啡店,有一列“wifi_restrictions”-一个整数值,表示您可以使用wifi的小时数。
我正在使用范围 gem,并希望它,如果我在参数“0”中获得值,那么它将返回wifi_restrictions = 0的Coffee Shop的所有实例。
我已经尝试了两种方法来实现这一点。
方法1:
在我的表格中,我有以下内容:
<input type="checkbox" name="no_wifi_restrictions" value="0">
在我的模型中,我有:
scope :wifi_restrictions, -> hours { where(wifi_restrictions: hours) }
在我的控制器里:
has_scope :wifi_restrictions, type: :integer
结果:nil:NilClass 的未定义方法“any?”
(即使没有为要过滤的作用域指定参数,我也会得到这个结果,这是我无法理解的)。
方法2:
在这个方法中,我尝试定义一个新的范围,“no_wifi_restrictions”。
在我的表格中,我有以下内容:
<input type="checkbox" name="no_wifi_restrictions" value="true">
型号:
scope :no_wifi_restrictions, -> { where(wifi_restrictions: 0) }
控制器:
has_scope :no_wifi_restrictions, type: :boolean
结果:当值为“true”(no_wifi_restrictions=true)时,这会正确筛选,但是当值为“false”(no_wifi_restrictions=false)时,将返回所有实例。在控制台中,如果我搜索CoffeeShop.no_wifi_restrictions,则会正确筛选。但是,如果我搜索CoffeeShop.where(no_wifi_restrictions:true)或CoffeeShop.where(no_wifi_restrictions:false),那么我也不会得到任何返回的实例。因此,我不确定它如何在50%的时间内工作(我不确定如何调查引擎盖下发生了什么)。
好的,我在想,当调用作用域方法时,下面的内容实质上将整数值转换为布尔值。
:no_wifi_restrictions, ->{ where(wifi_restrictions: 0) }
所以我想好了,如果我发送我的参数no_wifi_restrictions=true,它将返回Coffee Shop的所有实例,如果我在控制台中搜索,现在返回这些实例:
CoffeeShop.no_wifi_restrictions.
然而,这不是它的工作方式。因为在我的参数中,它传递一个值。因此,当我尝试这样做时,使用“true”的参数,我得到:
wrong number of arguments (given 1, expected 0)
我发现,解决这个问题的方法如下:
scope :no_wifi_restrictions, -> hours { where(wifi_restrictions: hours) }
也可以这样写:
scope :no_wifi_restrictions, -> hours { where("wifi_restrictions = ?", hours) }
这样做是允许将参数传递到作用域(小时)。因此,在这种情况下,我在参数中向它传递“0”的值,它将运行以下内容:
CoffeeShop.where(wifi_restrictions: 0)
本质上,“小时”值对于我的需要来说是不必要的,因为我并不真的想要或需要一个参数,只是我必须在params中提供一个值(除非我弄错了,否则我也尝试过删除value属性,但这导致了默认值“on”)。
因此,即使传递的参数本质上是多余的,下面的方法也是可行的:
scope :no_wifi_restrictions, -> hours { where("wifi_restrictions = 0", hours) }
在这种情况下,我可以在params中给出任何值,例如:
value="this_is_a_useless_param"
...它仍然可以工作,因为它只需要将一个参数传递给作用域。
也许有人知道一种更整洁的方法来实现这一目标,但现在这对我有用。
以下行将不起作用:
CoffeeShop.where(no_wifi_restrictions: true)
CoffeeShop.where(no_wifi_restrictions: false)
这些行试图获得所有咖啡店,其中列no_wifi_restrictions是真是假,我猜咖啡店没有该列。
如果参数值为true,您希望作用域返回所有wifi_restrictions=0的CoffeeShops,否则它应该返回所有wifi_restrictions
也许为wifi限制添加布尔列也更容易。看起来你现在正在尝试比较布尔和整数。
我想在Spring中处理某些异常并将REST响应包装成另一种对象格式。 因此,我想到了使用过滤器并检查响应状态代码的想法,例如,如果是400,则意味着请求不正确,因此我可以将响应包装为所需的JSON格式,下面是代码示例: 将特定异常的响应封装在过滤器中是一种好方法吗?这种情况的缺点是什么?
我试图在map()中使用filter(),但我得到了这个火花异常: RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1。地图(x)= 我知道火花不允许嵌套转换/动作/RDD,所以有人可以给我一个建议,如何替代它(没有嵌套转换或动作),我有一个RDD它的元组是这样的: 我试着映射它,给它一个列表作为参数,这个列表包含javaPairRDD这样的: 这些行指的是修改RDD()函
严重:启动筛选器springSecurityFilterChain org.SpringFramework.Beans.Factory.NoSuchBeanDefinitionException:否 名为“Spring SecurityFilterChain”的bean在org.springframework.beans.factory.support.defaultlistablebeanfac
我创建了一个自定义异常类 并且在抛出异常时将此异常类发送到客户端。我还使用进行进程。 如何捕获安全过滤器抛出异常并创建用户定义的异常并将其发送到客户端? 我的过滤方法,
首先,我试图使选择所有复选框,如果我单击表头中的选择所有复选框,整个表行将选择并显示一个复选框反向消息,即我选择了多少复选框。这里的问题是,如果我单击select all复选框,反向消息不会显示楼上的表,即我选择了多少行。 其次,如果我从任何列中筛选任何数字,相同的数字将显示同一列中有多少行具有相同的数字。如果我选中了所有复选框,那么反向消息将显示我选中了多少行复选框。这里,问题是显示整个表行计数
我正在尝试编写Spring应用程序,我有这个代码,但是当使用Tomcat 8运行这个代码时,出现了这个错误,我不知道错误的根本原因是什么,请帮助 错误: 网状物xml: WebSecurityConfig.xml