如何使用Rails中的事务块一次更新/保存模型的多个实例?
我想更新数百条记录的值; 每条记录的值都不同.这不是一个属性的批量更新情况.Model.update_all(attr:value)在这里不合适.
MyModel.transaction do
things_to_update.each do |thing|
thing.score = rand(100) + rand(100)
thing.save
end
end
Run Code Online (Sandbox Code Playgroud)
save似乎发布它自己的事务,而不是将更新批处理到周围的事务中.我希望所有更新都进入一次重大交易.
我怎么能做到这一点?
我正在尝试在node.js中运行一个简单的屏幕抓取应用程序.代码发布在这里:https : //github.com/anismiles/jsdom-based-screen-scraper http://anismiles.wordpress.com/2010/11/29/node-js-and-jquery-to-scrape -websites /
服务器启动正常,但是当我对它运行查询时,我收到以下错误.有谁知道那是为什么?
TypeError: Object #<Object> has no method 'on'
at Object.<anonymous> (/Users/avishai/Downloads/anismiles-jsdom-based-screen-scraper-f0c79d3/searcher-server.js:9:10)
at param (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
at param (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:157:15)
at pass (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
at Object.router [as handle] (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:168:6)
at next (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:218:15)
at Server.handle (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:231:3)
at Server.emit (events.js:45:17)
at HTTPParser.onIncoming (http.js:1078:12)
at HTTPParser.onHeadersComplete (http.js:87:31)
Run Code Online (Sandbox Code Playgroud)
似乎抛出错误的函数是:
function books(app){
app.get('/:query', function(req, res, next) {
res.writeHead(200, { 'Content-Type': 'text/html' });
var rediff = require('./searcher-rediff');
rediff.on('on_book', function(item){
res.write(item + "<br/>");
});
rediff.on('completed', function(){
res.end();
});
rediff.search(escape(req.params.query));
});
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
现在我注意到在第一次请求时,我得到了这个:
SyntaxError: …Run Code Online (Sandbox Code Playgroud) 如何添加到我的Rails 3应用程序的路由,该应用程序允许我有一个映射到RESTful资源中接受多个参数的操作的URL:
/modelname/compare/1234,2938,40395
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中,我想访问这些ID:
@modelname = Modelname.find(params[:modelname_ids])
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在尝试比赛'/modelname/compare/:modelname_ids', :to => 'modelname#compare',但我一直在努力No route matches "/modelname/compare/4df632fd35be357701000005,4df632fd35be357701000005".有什么建议?
我正在使用Carrierwave使用简单的控制器将照片上传到我的rails应用程序:
# POST /photos
# POST /photos.xml
def create
@photo = Photo.new(params[:photo])
respond_to do |format|
if @photo.save
format.html { redirect_to(@photo, :notice => 'Photo was successfully created.') }
format.xml { render :xml => @photo, :status => :created, :location => @photo }
format.json { render :json => @photo, :status => :created }
else
format.html { render :action => "new" }
format.xml { render :xml => @photo.errors, :status => :unprocessable_entity }
format.json { render :json => @photo.errors, :status => :unprocessable_entity }
end
end …Run Code Online (Sandbox Code Playgroud) ruby-on-rails image-uploading mongoid ruby-on-rails-3 carrierwave
我有一个WordPress网站,使用WPRO(WordPress只读)插件来托管Amazon S3上的所有媒体文件.我在自定义主题中更改了缩略图和图像大小,并将新图像上传到媒体库使用了新的大小.但是,当我尝试使用"重新生成缩略图"重新生成所有缩略图时,它不起作用,经常抱怨无法找到原始缩略图.
如何强制重新生成缩略图插件以使用S3上的原始图像重新创建现有图像的缩略图?
我正在构建一个Rails应用程序,可以在外部站点上进行转换跟踪.我想允许用户在其转化页面(例如AdWords)中粘贴图片代码,并且无论何时请求该图片,我的应用都会转换注册.
respond_to do |format|
if @conversion.save
flash[:notice] = 'Conversion was successfully created.'
format.html { redirect_to(@conversion) }
format.xml { render :xml => @conversion, :status => :created, :location => @conversion }
format.js { render :json => @conversion, :status => :created }
format.gif { head :status => :ok }
else
format.html { render :action => "new" }
format.xml { render :xml => @conversion.errors, :status => :unprocessable_entity }
end
end
Run Code Online (Sandbox Code Playgroud)
这样,浏览器就会获得一个不存在的.gif图像.有一个更好的方法吗?
我一直在使用geo near查询一段时间了,但我似乎无法弄清楚如何将结果限制在一定范围内.例如,如何在此查询中将搜索限制在20英里范围内?
Place.near(:coordinates => location.reverse)
# must reverse the resulting coordinates array because mongo stores them backwards [lng,lat]
Run Code Online (Sandbox Code Playgroud) 我已经设法获得特定多边形中包含的所有点的列表,但是如何查询PostGIS数据库以找出包含给定点的多边形?
假设我有一个places带有lat/lon位置(POINT类型)的areas表和一个geometry带有MULTIPOLYGON类型列的表.
如何编写一个返回地点列表和包含每个点的所有区域的查询?例如:
place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...
Run Code Online (Sandbox Code Playgroud) 我一直在将CSV文件上传到Heroku并进行处理时遇到问题.它在我的本地环境中工作正常.请注意,我不需要在Heroku上保存文件,只需在请求期间访问它,以便将其转换为字符串以进行处理并导入到DB中.
我想做的是:
控制器代码:
def create
@account = Account.find(params[:report][:account_id])
@file = params[:report][:file].read
# logger.info file.inspect
case @account.provider
when "Microsoft AdCenter" then @file.gsub!(/\A(.*)\n\n/im, "")
when "Google AdWords" then @file.gsub!(/\A(.*)\n/i, "")
else
raise "Invalid PPC report format"
end
end
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
Processing ImportController#create (for XX.182.6.XXX at 2010-09-11 09:19:01) [POST]
Parameters: {"commit"=>"Upload", "action"=>"create", "authenticity_token"=>"XXXXXwoFpvRO3vN8XVXRDg8rikFsj2TFTW7mrcTgg=", "controller"=>"import", "report"=>{"account_id"=>"1", "file"=>#<File:/home/slugs/126077_0657264_9a92/mnt/tmp/RackMultipart.9845.0>}}
NoMethodError (private method `gsub!' called for #<Tempfile:0x2b8ccb63ece0>):
/usr/local/lib/ruby/1.8/delegate.rb:270:in `method_missing'
app/controllers/import_controller.rb:15:in `create'
warden (0.10.7) lib/warden/manager.rb:35:in `call'
warden (0.10.7) lib/warden/manager.rb:34:in `catch'
warden (0.10.7) lib/warden/manager.rb:34:in `call'
/home/heroku_rack/lib/static_assets.rb:9:in `call' …Run Code Online (Sandbox Code Playgroud) 我正在迁移现有的Rails应用程序以使用MongoDB(使用Mongoid),而且我在查找如何进行聚合时遇到一些麻烦,就像使用MySQL一样.
以前我有类似的东西SELECT DATE(created_at) AS day, SUM(amount) AS amount GROUP BY day,哪个会返回一个你可以在模板中循环的集合,如下所示:
:day => '2011-03-01', :amount => 55.00
:day => '2011-03-02', :amount => 45.00
etc...
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何在Mongoid中做到这一点?该模型非常简单:
class Conversion
include Mongoid::Document
include Mongoid::Timestamps
field :amount, :type => Float, :default => 0.0
...
# created_at generated automatically, standard Rails...
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
-Avishai
最近几天Passenger一直在我的Slicehost VPS上消耗大量内存,而我似乎无法控制住它.它可以运行几个小时,然后突然产生大量的红宝石.我认为Apache是问题,所以我切换到Nginx,但问题仍然存在.这是一个转储top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5048 avishai 20 0 160m 43m 1192 S 0 10.9 0:00.77 ruby1.8
5102 avishai 20 0 151m 41m 1392 S 0 10.6 0:00.07 ruby1.8
5091 avishai 20 0 153m 30m 1400 D 0 7.6 0:00.27 ruby1.8
5059 avishai 20 0 158m 27m 1344 D 0 7.0 0:00.64 ruby1.8
4809 avishai 20 0 161m 27m 1208 D 0 6.9 0:06.65 ruby1.8
4179 avishai 20 0 …Run Code Online (Sandbox Code Playgroud) 如何使用适用于Rails的PostGIS适配器保存多边形?在我的模型中,我有:
self.rgeo_factory_generator = RGeo::Geos.factory_generator
set_rgeo_factory_for_column(:bounds, RGeo::Geographic.spherical_factory(:srid => 4326))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将多边形保存到数据库时,它不会引发任何错误,但始终无法存储多边形:
1.9.3p194 :011 > n.bounds = "POLYGON(-149.737965876574 61.1952881991104, -149.71848377896 61.1953198415937, -149.718483761252 61.1952938698801, -149.718483872402 61.1951924591105)"
=> "POLYGON(-149.737965876574 61.1952881991104, -149.71848377896 61.1953198415937, -149.718483761252 61.1952938698801, -149.718483872402 61.1951924591105)"
1.9.3p194 :012 > n.save
(0.2ms) BEGIN
(0.3ms) COMMIT
=> true
1.9.3p194 :013 > n.bounds
=> nil
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它发挥作用?
如何在Refinery CMS中添加自定义字段?也就是说,我想扩展基本页面模型以包含一些其他内容,例如截图,发布者名称,类别和各种其他字段.你是如何实现的?
ruby-on-rails ×10
ruby ×4
mongoid ×3
postgresql ×3
geolocation ×2
mongodb ×2
postgis ×2
activerecord ×1
amazon-s3 ×1
carrierwave ×1
connect ×1
fastercsv ×1
file-upload ×1
heroku ×1
javascript ×1
mapreduce ×1
nginx ×1
node.js ×1
passenger ×1
refinerycms ×1
rest ×1
routes ×1
sql ×1
tracking ×1
transactions ×1
wordpress ×1