基于Rails 3 API,范围和类方法之间的差异几乎不存在.
class Shipment < ActiveRecord::Base
def self.unshipped
where(:shipped => false)
end
end
Run Code Online (Sandbox Code Playgroud)
是相同的
scope :unshipped, where(:shipped => false)
Run Code Online (Sandbox Code Playgroud)
但是,我发现我有时会使用它们得到不同的结果.
虽然它们都生成相同的,正确的SQL查询,但在调用时,范围似乎并不总是返回正确的值.看起来这个问题只发生在它在方法中两次调用相同的方式时,尽管是在不同的货件上.第二次调用时,使用范围时它会返回与第一次相同的操作.然而,如果我使用类方法,它可以正常工作.
使用范围时是否会出现某种查询缓存?
编辑:
order.line_items.unshipped
Run Code Online (Sandbox Code Playgroud)
上面的行是调用范围的方式.订单有很多line_items.
generate_multiple_shipments方法被调用两次,因为测试会创建一个订单并生成货件以查看其数量.然后它会对订单进行更改并重新生成货件.但是,group_by_ship_date返回与订单的第一次迭代相同的结果.
def generate_multiple_shipments(order)
line_items_by_date = group_by_ship_date(order.line_items.unshipped)
line_items_by_date.keys.sort.map do |date|
shipment = clone_from_order(order)
shipment.ship_date = date
line_items_by_date[date].each { |line_item| shipment.line_items << line_item }
shipment
end
end
def group_by_ship_date(line_items)
hash = {}
line_items.each do |line_item|
hash[line_item.ship_date] ||= []
hash[line_item.ship_date] << line_item
end
hash
end
Run Code Online (Sandbox Code Playgroud) 我在我的网站上有一个页面,我正在尝试测试,要求用户在继续操作之前在页面上花费至少五秒钟.有没有办法让Capybara让我的Cucumber测试暂停在那个页面上等待五秒钟,然后继续我描述的下一步?
我想根据匹配发生在字符串中的位置对jQuery自动完成UI结果进行排序.匹配是第一个字母的结果应优先于匹配位于字符串中间的结果.
搜索"M"应返回:
马特,迈克尔,萨姆,蒂姆,亚当,本杰明
相反,因为它现在只是按字母顺序返回项目,所以我得到了这个:
亚当,本杰明,马特,迈克尔,萨姆,蒂姆
不幸的是,看起来Autocomplete UI没有任何选项来执行此类操作,而只是按照收到它们的顺序显示结果.让MySql进行排序不是一个选项,因为所有可能的匹配都是预先加载的,因此我不会在每次按键时调用数据库.有人做过这样的事吗?
我有一个成员图和他们看过的项目.
此数据将用于根据类似成员查看过的项目推荐项目.我想根据项目颜色的相似程度对项目进行排序.颜色以数组形式存储在项目中(["红色","蓝色","绿色"]).在cypher中有没有办法比较数组,看看它们共有多少个元素?
我有一个启用了评论应用程序的 Heroku 应用程序。审查应用程序是基于我的应用程序根目录中的 app.json 文件配置的。我可以添加插件,但似乎无法启用运行时动态元数据实验室功能。以下只是我尝试使其工作的众多方法之一......
{
"name": "Foo",
"scripts": {
"postdeploy": "bundle exec rake db:migrate db:seed"
},
"formation": {
"worker": {
"quantity": 1
},
"web": {
"quantity": 1
}
},
"addons": [
"heroku-postgresql",
"heroku-redis",
],
"labs": [
"runtime-dyno-metadata"
],
"buildpacks": [
{
"url": "https://github.com/heroku/heroku-buildpack-nodejs.git"
},
{
"url": "https://github.com/heroku/heroku-buildpack-ruby.git"
}
]
}
Run Code Online (Sandbox Code Playgroud)