ActiveRecord 4.0.0 版本中的ActiveRecord 功能是否find_each可以接受替代?all
例如,之前我有:
all_users = User.all
Run Code Online (Sandbox Code Playgroud)
它会产生一条警告,指出类似于 ActiveRelation:all 的内容已被弃用。
作为替代,我想出了:
User.find_each do |user|
all_users += user
end
Run Code Online (Sandbox Code Playgroud)
这是可以接受的,还是我应该以另一种方式做?
我理解使用背后的原因find_each是因为“批处理”,如果存在非常大的数据集,它将允许查询停止运行。我们假设这种情况下数据集很小。
编辑
似乎只有当您使用条件时才会出现弃用错误,例如:
User.all(:conditions => ["name like ?", "%bob%"])
Run Code Online (Sandbox Code Playgroud)
产生:
弃用警告:Relation#all 已弃用。如果你想立即加载一个关系,你可以调用#load(例如
Post.where(published: true).load)。如果你想从关系中获取记录数组,你可以调用#to_a(例如Post.wher e(published: true).to_a)。(从 (irb):8 处的 irb_binding 调用)
上述内容的正确替换似乎是:
User.where("name like ?", "%bob%")
Run Code Online (Sandbox Code Playgroud) ruby activerecord sinatra ruby-on-rails-4 sinatra-activerecord
我有一个简单的 Sinatra 应用程序托管在 Heroku 上,并使用 Sequel 通过 ClearDB 插件连接到 MySql 数据库。
该应用程序工作正常,除非它闲置超过一分钟。在这种情况下,我发出的第一个请求给出了“500 内部服务器错误”,heroku logs显示为:
sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)
如果我在出现此错误后刷新页面,则它工作正常,并且直到应用程序闲置一分钟左右,错误才会返回。
该应用程序正在运行两个 dyno,因此问题不是由您可能在免费帐户上看到的 Heroku dyno 空闲引起的。我联系了 ClearDB 支持,他们给了我以下建议:
如果您使用连接池,那么您应该将空闲超时设置为略低于 60 秒和/或设置保持活动状态,如下所述。如果您没有使用连接池,那么您必须确保应用程序在查询后实际关闭连接,并且不依赖网络超时来关闭它们。
我知道我可以创建一个 cron 作业来每 30 秒左右访问一次服务器,但这似乎是一个不雅的问题解决方案。关于确保应用程序关闭连接的另一个建议我不明白。我只是使用 Sequel 进行查询,我假设 Sequel 在幕后为我管理连接。我是否需要对其进行配置以确保它关闭连接?我该怎么做?
我写了一个小的ruby应用程序,这是一个anagram搜索器.这是学习红宝石,但我想把它放在网上供个人使用.我对Rails有一些经验,很多人都推荐过Sinatra.我也没关系,但我找不到有关如何使用文本文件而不是数据库的任何信息.
应用程序非常简单,对单词列表的文本文件进行验证,然后查找所有字谜.我一直认为这应该很简单,但是我坚持将该文本文件导入Rails(如果我选择那样的话,那就是Sinatra).在Rails项目中,我将文本文件放在lib目录中.
不幸的是,即使Rails中的路径看起来是正确的,我也会收到错误:
no such file to load -- /Users/court/Sites/cvtest/lib/english.txt
Run Code Online (Sandbox Code Playgroud)
(cvtest是rails项目的名称)
这是代码.它本身很好用:
file_path = '/Users/court/Sites/anagram/dictionary/english.txt'
input_string = gets.chomp
# validate input to list
if File.foreach(file_path) {|x| break x if x.chomp == input_string}
#break down the word
word = input_string.split(//).sort
# match word
anagrams = IO.readlines(file_path).partition{
|line| line.strip!
(line.size == word.size && line.split(//).sort == word)
}[0]
#list all words except the original
anagrams.each{ |matched_word| puts matched_word unless matched_word == input_string }
#display error if
else
puts "This …Run Code Online (Sandbox Code Playgroud) mkristgan的rack_datamapper gem说它"可以被包装用于特定的环境,即Rack :: Session :: Datamapper".
不幸的是,我还不太了解Ruby来完成这项任务 - Ruby中的模块/类仍然在我的头上(来自PHP).
任何人都可以使用rack_datamapper来实现Rack :: Session :: Datamapper吗?
你可能不想这样做.
下面的答案很好,但经过仔细考虑,我意识到我不应该这样做.相反,我将user_id,ip和名字(为方便起见)放在cookie中并保护它.
首先,我没有使用Rails.我正在使用Sinatra进行Active Record的这个项目.
我希望能够在我的Model类上覆盖to_json或as_json,并让它定义一些'default'选项.例如,我有以下内容:
class Vendor < ActiveRecord::Base
def to_json(options = {})
if options.empty?
super :only => [:id, :name]
else
super options
end
end
end
Run Code Online (Sandbox Code Playgroud)
其中Vendor具有的属性多于id和name.在我的路线中,我有以下内容:
@vendors = Vendor.where({})
@vendors.to_json
Run Code Online (Sandbox Code Playgroud)
这@vendors是一个Array供应商对象(显然).但是,返回的json不会调用我的to_json方法并返回所有模型属性.
我实际上没有选择修改路线,因为我实际上使用的是修改过的sinatra-rest gem(http://github.com/mikeycgto/sinatra-rest).
有关如何实现此功能的任何想法?我可以在我的sinatra-rest gem中做类似下面的事情,但这看起来很傻:
@PLURAL.collect! { |obj| obj.to_json }
Run Code Online (Sandbox Code Playgroud) 不幸的是,在开始时迷路了.使用官方指南http://www.padrinorb.com/创建第一个test_app
当尝试"padrino start"应用程序启动时,服务器在控制台中运行良好,但是一旦我尝试在borwser中看到它,就会出现以下错误消息:
/ admin/undefined方法中的NoMethodError`匹配?' for nil:NilClass文件:routing.rb location:route line:66
此外,我看不到favicon,而控制台说它无法找到它.
(尝试使用Thin和Webrick.我正在使用Ubuntu和RVM Ruby1.9 Gem 1.3.7 Rails3.更新了Sinatra和Padrino宝石,进行了清理.)
非常感谢,gezope
我们正在使用第三方Web服务将POSTS多部分数据(文件)发回给我们.但它也通过网址传递额外的参数 http://ourdomain.com/theposturl?extra=good
'filename'对象:filename和:二进制数据的tempfile是params []
但是我们如何从网址中获得"好"呢?
post /theposturl
puts params.inspect # this shows a hash with filename,
# :filename and :tempfile as expected
extra_param = ??????[:extra] # but what lets us 'read' the ?extra=good off the url
end
Run Code Online (Sandbox Code Playgroud) 我对Ruby和后端开发一般都是新手.话虽这么说,我正在尝试创建一个简单的搜索表单.我使用Sinatra作为框架,使用Datamapper作为我的ORM.做这个的最好方式是什么?下面是我的架构我希望搜索操作同时搜索磁贴和类别.
require 'sinatra'
require 'datamapper'
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db")
class Event
include DataMapper::Resource
property :id, Serial
property :title, String
property :text, Text
property :contact_name, String
property :contact_email, String
property :location, String
property :event_start_time, String
property :event_end_time, String
property :category, String
property :created_at, DateTime
property :approved, Boolean, :default => false
end
DataMapper.auto_upgrade!
post '/search' do
@results = Event.all
erb :layout
end
Run Code Online (Sandbox Code Playgroud)
============ layout.erb
<form action="/search" method="post">
<input type="text" name="query"/><br />
<input type="submit" />
</form>
<% if @results %>
<table>
<%@results.each do |r|%>
<tr …Run Code Online (Sandbox Code Playgroud) 我想MONGOHQ_URL在我的sinatra应用程序中设置以便能够这样做:
uri = URI.parse(ENV['MONGOHQ_URL'])
Run Code Online (Sandbox Code Playgroud)
我该如何设置MONGOHQ_URL?
我可以在Heroku上启动一个基本的应用程序,显示带有'/'的消息......工作得很好.但是,每当我尝试使用datamapper添加sqlite时,事情就会崩溃.
要查看我的应用程序结构,请查看github上的项目.我保持代码相当简陋.
在heroku的日志中我得到:
2011-06-26T21:28:36+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/dm-core-1.1.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-postgres-adapter (LoadError)
Run Code Online (Sandbox Code Playgroud)
关于这一点的是我没有使用postgres,所以我很困惑为什么这么说.