我有这些功能:
TargetWorksheet.toggle_child_locations = function(id){
$("#location-children-"+id).slideToggle("slow");
}
TargetWorksheet.get_child_locations = function(id, lvl){
//Ajax grab all children and targets, and display children
$.get('child_locations',{ location_id: id, level: lvl}, function(data){
$("#location-children-"+id).append(data);
TargetWorksheet.toggle_child_locations(id);
});
//Change onClick to just toggle since child data will now be loaded
$("#location-toggle-"+id).click(function(){
TargetWorksheet.toggle_child_locations(id);
});
}
Run Code Online (Sandbox Code Playgroud)
这个电话:
$(function(){
TargetWorksheet.toggle_child_locations(2);
$("#location-toggle-2").click(function(){
TargetWorksheet.get_child_locations(2,1);
});
});
Run Code Online (Sandbox Code Playgroud)
所以我将点击事件附加到我的"+"链接(#location-toggle-2),该链接切换子数据.在第一次单击时,我想进行ajax调用以检索子数据,但是我只想覆盖#location-toggle-2上的.click,以便它现在只是切换,并且不会进行ajax调用.上面的代码不起作用,它似乎没有覆盖.click,并且每次都进行ajax调用.
有谁知道如何覆盖项目的.click事件?我也尝试
$("#location-toggle-"+id).click(TargetWorksheet.toggle_child_locations(id));
过,由于某种原因,它一直在递归地翻转.
思考?
我正在建立一个简单的会计系统,用户有很多账单.现在,我正在尝试决定账单应该是自己的集合,还是嵌套在用户中.我倾向于前者,但我从来没有做过任何noSQL的东西所以我只是通过反复试验和我认为对我有意义.
据我所知,Mongo有4mb的文件大小限制,这让我觉得我应该有一个单独的账单收集,因为这些将每天累积,最终可能占用大量空间.
我只是在寻找有关此事的意见.基本上我会查询不同日期之间的用户账单(你可以想象会计系统会这样做).
并不是真的很重要,但我在Rails3项目中使用Mongoid.我想我会做类似的事情:
class User
references_many :bills
end
class Bill
referenced_in :user
end
Run Code Online (Sandbox Code Playgroud)
任何评论或设计建议都非常感谢.
我一直非常喜欢使用contexts,subjects并its使用rspec来真正清理我的测试代码.典型例子:
context "as a user" do
subject{ Factory :user }
its(:name){ should == "Bob" }
end
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的是我如何使这个条件动态(即基于其他对象). its似乎实例eval了块内的属性,所以我无法访问它周围的一切.我喜欢做类似的事情:
its(:name){ should == subject.contact.name }
Run Code Online (Sandbox Code Playgroud)
但我看不出任何实现这一目标的方法.有没有人知道是否有一个方法代理到这个实例eval,它提供了对原始对象的访问?或者,如果有任何其他方式,我可以使用我正在检查的属性实例范围之外的方法?
似乎subject在its块中变为实际属性(name在这种情况下)
有趣的是,我可以访问我的任何let方法,但同样,我无法访问我原来subject的问题.
我有一个关于ruby中的|| =语句的问题,这对我来说特别有意义,因为我正在使用它来写入memcache.我想知道的是,是否|| =先检查接收器,看它是否在调用setter之前设置,或者它实际上是别名x = x || y
这在普通变量的情况下并不重要,但使用类似的东西:
CACHE[:some_key] ||= "Some String"
Run Code Online (Sandbox Code Playgroud)
可能会做一个比简单变量集更昂贵的memcache写入.奇怪的是我在ruby api中找不到关于|| =的任何内容,所以我自己无法回答这个问题.
我当然知道:
CACHE[:some_key] = "Some String" if CACHE[:some_key].nil?
Run Code Online (Sandbox Code Playgroud)
会实现这一点,我只是在寻找最简洁的语法.
我有一堆rails模型,我正在重写为单个模型,以简化我的代码并减少不必要的表.
我想知道删除模型类及其表的最佳方法是什么.我希望过去的迁移仍能成功,但我不想让空模型四处闲置.我是否必须手动删除引用这些模型的旧迁移,然后手动删除类文件?
有没有人有最好的方法来做到这一点?
我试图让我的应用程序在部署之前打包我的宝石(到heroku)我的Gemfile中的一个宝石是我编写的自定义宝石,我使用的是捆绑器的:git选项来使用特定的标签我感兴趣的是:
gem "my_gem", :git => "git@github.com:my_username/my_gem.git", :tag => "v0.1.0"
Run Code Online (Sandbox Code Playgroud)
bundle package但是,当我运行时,此gem不包含在我的vendor/cache目录中.这是一个已知问题,即Bundler不打包使用git源而不是打包的.gem文件的gem?
我没有在文档中找到任何说法的内容,但我真的希望使用它:git选项可以省去我必须实际构建gem并将其托管在某处的麻烦.(所有这些代码都不是开源或公开的,所以我不想把它推到gemcutter)
另请注意,我需要首先打包我的宝石,因为由于公钥问题,heroku将无法访问部署时的git源.
我最近尝试做类似于此的事情:
a = "some string"
b = Proc.new{ upcase }
a.instance_eval b
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
TypeError:无法将Proc转换为String
但这有效:
def b(&block)
"some string".instance_eval &block
end
b{ upcase }
Run Code Online (Sandbox Code Playgroud)
进一步了解这种方法:
def b(&block)
"some string".instance_eval block
end
Run Code Online (Sandbox Code Playgroud)
产生相同的Proc to String错误.
所以...我对块的理解是它们只是触发器.但是这个&&符号显然有一些特别之处......
谁可以给我解释一下这个?是否有可能将正常的proc转换成&block对象的特殊之处?
刚刚想出了我的第二个问题,在前面加了一个&...这很容易,但这是真的在做什么?
我只是在学习GWT,所以我还在努力解决它的所有怪癖和特征.我正在阅读他们给出的描述MVP模式的例子,我几乎得到它,除了我想知道一件事.
他们使用的AppController实现了ValueChangeHandler接口,并且在历史记录更改时触发onValueChange方法.
我的问题在于AppController中的onValueChange(我已将它包含在下面,供没有看过示例项目的人使用).它正在对发送的历史记录进行字符串比较,并实例化相应的演示者以处理该操作.对于具有3个动作的示例应用程序来说,这一切都很好,但是如何将其扩展为具有更多操作的真实应用程序?
坚持这种模式会导致相当大/丑else if,但我仍然太新GWT(和java)推断更大的应用程序更好的模式.
任何帮助是极大的赞赏!
public class AppController implements Presenter, ValueChangeHandler<String> {
...
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
if (token != null) {
Presenter presenter = null;
if (token.equals("list")) {
presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView());
}
else if (token.equals("add")) {
presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
}
else if (token.equals("edit")) {
presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
}
if (presenter != null) {
presenter.go(container);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个gem,它table_name根据用户配置选项动态地设置ActiveRecord模型(例如)的属性.
我有一个初始化器来实现这一目标.然而,我的问题是在开发模式下,这些类被重新加载,因此它们不会维护这些值.
所以我想我会使用一个铁路来挂钩重新加载这些文件并在模型上再次运行我的配置.然而,我的问题是config.to_prepare铁路似乎在reload!实际发生之前运行.我可以通过一些记录来证明这一点:
module MyMod
class Railtie < Rails::Railtie
config.to_prepare do
Rails.logger.debug("Contact object_id: #{Contact.object_id}")
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果我加载我的控制台,我得到第一个日志:
Contact object_id: 2202692040
Run Code Online (Sandbox Code Playgroud)
如果我检查Contact.object_id它匹配:
Contact.object_id #=> 2202692040
Run Code Online (Sandbox Code Playgroud)
然后我 reload!
reload!
Run Code Online (Sandbox Code Playgroud)
我的to_prepare日志中的Rails记录器:
Contact object_id: 2202692040
Run Code Online (Sandbox Code Playgroud)
所以它仍然有旧的object_id,但是当我在控制台中检查它时:
Contact.object_id #=> 2197355080
Run Code Online (Sandbox Code Playgroud)
哪个是新加载的类对象id.
那么重新加载文件后如何to_prepare运行?运用Rails 3.0.10
我也尝试手动将此操作附加到类似的after_prepare回调上,ActionDispatch::Callbacks这样:
initializer "apartment.init" do
ActionDispatch::Callbacks.set_callback(:prepare, :after) do
Rails.logger.debug("Contact object_id: #{Contact.object_id}")
end
end
Run Code Online (Sandbox Code Playgroud)
确实在config.to_prepare它之后运行回调但是它似乎仍然发生before重新加载文件...我得到与上面相同的行为.
是否有可能在Cedar堆栈上使用Unicorn在Heroku上执行Github零停机部署?
我不完全确定重启是如何在Heroku上运行的,以及我们对重启过程有什么控制,但是我喜欢零停机部署的可能性,直到现在,从我读过的,它是不可能的
这需要一些工作.
我已经搜索了文档,但是我找不到任何可以表明Heroku上可行的内容.有什么想法吗?