我正在尝试创建自定义rake任务,但似乎我无法访问我的模型.我认为这是rails任务中隐含的内容.
我在lib/tasks/test.rake中有以下代码:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的父模型的样子:
class Parent < ActiveRecord::Base
has_many :children
end
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的例子,但我收到以下错误:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢
我已经google了一下,但还是无法弄清楚两者之间的确切差异.从jquery-rails上读到我(https://github.com/indirect/jquery-rails)似乎jquery-ujs补充了它,但我不确定为什么/如何.
如果有人可以打破这一点,我将不胜感激.
谢谢.
我试图让ActiveModel :: Callbacks与ActiveResource(特别是after_initialize)一起使用Rails 3应用程序,但我似乎无法让它工作.我没有得到任何错误,但回调方法永远不会执行.
这是一段代码
class User < ActiveResource::Base
extend ActiveModel::Callbacks
define_model_callbacks :initialize, :only => :after
after_initialize :update_info
def update_info
puts 'info'
end
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,从不执行update_info.任何人都知道如何让这个工作?
我知道在rails 2.3.2中缓存了ActiveRecord查询,即您可能会在开发/生产日志中看到一些内容:
CACHE (0.0ms) SELECT * FROM `users` WHERE `users`.`id` = 1
Run Code Online (Sandbox Code Playgroud)
我想知道相同的原则是否适用于rake任务.
我有一个rake任务,它将查询许多不同的模型,我想知道我是否应该实现自己的缓存,或者默认情况下是否包含此行为.
另外,有没有办法查看在rake任务期间执行的sql查询?与开发/生产日志类似
我正在将现有的rails 2应用更新到rails 3,并且在理解资产管道时遇到一些麻烦.我已经阅读了指南,据我了解,以下任何目录中的文件都将解析为/ assets:
并且您可以使用帮助程序访问它们...即
image_tag('logo.png')
Run Code Online (Sandbox Code Playgroud)
但我不明白的是如何处理碰撞?例如,如果有以下文件,该怎么办:
如果我去myapp.com/assets/images/logo.png,将返回哪个文件?我可以在我的应用程序中手动检查碰撞,但这在使用依赖资产管道的宝石时成为一个痛点.
我知道你可以做这样的事情来加载rails环境:
task :my_task => :environment do
MyModel.find(1)
end
Run Code Online (Sandbox Code Playgroud)
但似乎模型中的代码没有执行.我正在使用acts_as_audited,并且有一个很好的类函数可以检索所有正在审计的模型.电话看起来像:
Audit.audited_classes
Run Code Online (Sandbox Code Playgroud)
要将模型指定为可审核,只需将此行添加到模型中:
acts_as_audited
Run Code Online (Sandbox Code Playgroud)
当在控制台中执行audited_classes时,我得到一个包含所有审计类的数组; 但是,当我从rake任务(或迁移)中执行它时,我得到一个空数组.
[编辑]
在玩了一下之后,我注意到如果模型在被引用之前没有被实际加载(即延迟加载).我认为在配置中将cache_classes设置为true会解决这个问题,但它们似乎仍然是延迟加载的.
一种可能的解决方案是遍历所有模型(如本文所述:有没有办法在Rails应用程序中获取所有模型的集合?)但这看起来有点hacky,我希望有一个清洁的方式.
有任何想法吗?
谢谢
我正在尝试使用UrlLoader模拟'HEAD'方法; 本质上,我只想检查文件是否存在而不下载整个文件.我想我只会使用HttpStatusEvent,但是当您在调试模式下运行时,以下代码会抛出异常(我无法在try/catch块中包装).
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
<![CDATA[
private static const BIG_FILE:String = "http://www.archive.org/download/gspmovvideotestIMG0021mov/IMG_0021.mov";
private var _loader:URLLoader;
private function init():void {
_loader = new URLLoader();
_loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, statusHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
_loader.load(new URLRequest(BIG_FILE));
}
public function unload():void {
try {
_loader.close();
_loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, statusHandler);
_loader.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler);
_loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
}
catch(error:Error) {
status.text = error.message;
}
}
private function errorHandler(event:Event):void {
status.text = "error";
unload();
}
private function statusHandler(event:HTTPStatusEvent):void {
if(event.status.toString().match(/^2/)) {
status.text = "success";
unload();
}
else {
errorHandler(event);
}
} …
Run Code Online (Sandbox Code Playgroud) 我知道这不是最佳实践,并且很可能甚至不应该使用,因为迁移的用途是什么,但我想知道是否可以在常规rake任务中执行特定于迁移的命令.就像是:
namespace :dummy do
task :update => :environment do
add_column :users, :deleted, :boolean, { :null => false, :default => false }
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢
我知道如果我想调用另一个控制器的助手,我可以这样做:
helper :other_controllers
Run Code Online (Sandbox Code Playgroud)
但我想知道为什么我不能在视图中做像OtherControllersHelper.method这样的事情?
rake ×4
activerecord ×3
migration ×2
activemodel ×1
apache-flex ×1
jquery ×1
task ×1
urlloader ×1