-
rails 如何reload某个class45
console中reload!指令,可以重新加载项目
但是如果仅是在运行过程中重新加载某个class 代码,改如何做?
问题补充:
不是这样简单的
基本情况是这样 有两个表fool和fish,相互关系为has_many,既fool.fishs
在运行过程中 基本逻辑如下
fools = Fool.find(:all) fools.each do |x| Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表 p x.fishs #这里会出错 end
测试都是在console中进行的
多次测试下来,情况好像是这样。
fools = Fool.find(:all)
这个语句加载了Fool,Fish代码,并确定为 Fish的table_name是 fish
虽然Fish.class_eval("set_table_name :fish_1_1")切换了表,但是fools依然使用的旧代码。
于是想考虑下 把 Fool和Fish的代码重新reload
这种情况下 ruby自动加载功能就不够用了。
问题补充:
测试在控制台进行,不是代表代码的实际运行环境
控制台比较好测试这个。如果是development,这个测试就没有意义了。
问题补充:fools = Fool.find(:all) Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表 fools.each do |x| p x.fishs #这里会出错 end
呵呵,这个是个很麻烦的问题。
不过这样改是不太符合运行环境的。
fools数据处理过程中,很有可能因为某个外部条件已经到达,需要马上切换fishs表数据。
现在我做了rake,先将就着用了
当each 中 x.fishs 出错,记录下出错的fool.id,然后把代卖全部reload一次,从出错的id重新运行这段代码。
当然这个并没有根本上解决问题。
问题补充:
to:夜鸣猪
load Rails_ROOT+'/app/models/Fish.rb'
这个做法,没有用
你如果看我提供代码就会发现, 是在运行时改变了 fish表对应的table_name
我所希望找到的方案就是更改table_name之后,代码能够立即生效。
重新load,那load是事先编写好的静态代码,根本无用阿。
我在前后已经说的很清楚了,是怎么样一个运行环境,和代码怎么出错的。
你可以自己建几张表 fools ,fishs_1,fishs_2,fishs_n
自己模拟测试下就明了了,不然只是浪费你我时间而已。
2009年6月30日 22:29
5个答案 按时间排序 按投票排序
-
我只是希望能确认一下
为什么,你不能在console下,直接输入
load Rails_ROOT+'/app/models/Fish.rb'
这也不是把你的新修改的文件,又加载了一遍吗?
而且,应该能够覆盖
不了解状况,希望能试试解除俺的疑惑,谢谢
2009年7月02日 10:15
-
引用不过这样改是不太符合运行环境的。
fools数据处理过程中,很有可能因为某个外部条件已经到达,需要马上切换fishs表数据。
不了解你的运行环境,或许可以这样:some_proc = lambda do Fish.class_eval do #do something end end def some_condition_of_fools # some_proc.call if some_condition end
2009年7月01日 22:52
-
刚学rails...还不太熟悉。从纯ruby的角度分析了一下,感觉你在一个block里面去修改block调用者自身才会达不到想要的结果,看下面的例子:
[1,2,3].each do |i| #在each block内修改each.. Array.class_eval do def each size.times{|i| yield self[i] * 2} end end p i end #结果为1 2 3 #在外部修改each.. Array.class_eval do def each size.times{|i| yield self[i] * 2} end end [1,2,3].each{|i| p i} #结果为 2 4 6
不太理解下面的代码:fools = Fool.find(:all) fools.each do |x| Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表 p x.fishs #这里会出错 end
是不是能写成这样?fools = Fool.find(:all) Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表 fools.each do |x| p x.fishs #这里会出错 end
希望能有帮助..2009年7月01日 16:07
-
哇,45分啦
可是我的确不知道有什么明确的办法,可以在控制台下,支持指定Reload的办法
我只是想,说说我的看法,探讨一下,希望多少有点帮助吧
1. 必须用控制台
2. 必须要只更新一个特定table
控制台就是协助开发吧,有什么必定用它的道理吗,平心而论啊,比如,rails下debug也很好用吧? 想法而已
其次,假设必须控制台
我考虑,你能不能,继承覆盖,就是通过require或者load来一个新的model覆盖原来的?想法而已2009年7月01日 11:10
-
要重新加载的class一定是修改过的吧?
既然修改过ruby会自动重新加载:class TT def say_hello "hello" end end tt = TT.new p tt.say_hello class TT def say_hi "hi" end end p "class changed" p tt.say_hi p tt.say_hello
2009年6月30日 22:57
相关推荐
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色大气风格的复古设计网站HTML模板.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
S7-200 基于PLC的糖果包装控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
简单易操作的发票批量打印工具。可以对发票进行排版、批量打印等。
白色大气风格的楼盘销售公司企业网站源码下载.zip
数电期末练习题.doc
白色简洁风格的APP展示动态源码下载.zip
基于SMO滑模观测器的异步电机无传感器矢量控制,matlab,仿真模型。
白色大气风格的CSS网站商务模板.zip
白色大气的旅游度假酒店企业网站模板下载.zip
使用教程在这里
教师管理系统_java
51jobduoyehtml爬虫程序代码QZQ3
白色大气风格的探险文化企业网站模板下载.zip
白色扁平风格的原创素材类企业网站源码下载.zip
基于HTML实现的一棵漂亮美观圣诞树
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色简洁风格的餐饮食材食谱整站网站源码下载.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;