天津福康,电子烟,磁疗,远红外线产品。
2008年十一月的日志归档
十一 30

随便写写

2008年十一月30日,星期天,上午 8:08 | 分类:others | 给我留言 |

刚才看了gmail里发来的一篇文章,引用一句话 应用开发者都应该思考到底哪种选择才是最符合其需要的 08年11月即将过去了

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,下午 5:05 | 分类:tech | 给我留言 |

加载路径 标准的环境配置回自动将下列目录纳入应用程序的加载路径。 test/mocks/environment 由于该目录位于加载路径的第一位,在这里定义的类回自动覆盖真正的实现类,这样你就可以在测试阶段使用这些替代品。 app/controllers 目录及其子目录。 app/models 和 components 目录下所有以下划线或者小写字母开头的目录。 app, app/models, app/controllers, app/helps, app/services, app/apis, components, config, lib 以及 vendor 目录 检查 vendor/rails 目录,如果存在就从这里加载 Rails 库。 命名约定 变量名全部小写,单词之间以下划线分割。 类和模块的名称没有下划线,短语中每个单词的首字母大写。 表应该像变量一样,采用小写字母,并且是复数形式。 文件名全部小写,以下划线分割。 controller 用名词,action 用动词。当你创建了一个 action 的名字是 动词_名词 这样的格式,那么有必要再创建一个新的controller了 。

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,上午 6:06 | 分类:tech | 给我留言 |

第9章 使用局部模板。 render :partial => “cart”, bject => @cart render :partial => “cart_item”, :collection => @cart.items 辅助方法的一个示例。 # app/views/layout/stroe.rhtml “cart”) %> “cart”, bject => @cart %> <div> # app/controllers/store_controller.rb def hidden_div_if(condition, attributes = {}) if condition attributes["style"] = “display: none;” end attrs = tag_options(attributes.stringify_keys) ” ” end 第10章 validates_inclusion_of 方法验证某属性,在指定的列表中存在。防止别人构造不存在的支付方法逃避支付。 PAYMENT_TYPES = [ ["Check", "check"], [...]

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,上午 2:02 | 分类:tech | 给我留言 |

第12章 使用 :through 声明,可以通过间接关联来联系两张表。 可以使用 curl 或者 wget 工具来模拟请求xml。 class Product < ActiveRecord::Base has_many rders, :through => :line_items end class Order < ActiveRecord::Base has_many :line_itemss end class LineItem < ActiveRecord::Base belongs_to rders belongs_to :product end curl http://localhost:3000/info/who_bought/1 第11章 after_destroy 钩子方法于 delete 同在一个事务中,因此只要该方法里抛出异常,整个事务会回滚。after_destroy 会在 delete 语句执行之后被调用。 这里关键概念是,用异常来表示删除用户的过程中出现了错误。这里的异常同时承担两个任务。首先,在事务内部,异常会导致自动回滚;如果在删除用户之后 user 表为空,抛出异常可以撤销删除操作,恢复最后一个用户。 其次,异常可以把错误信息带回给控制器。 # app/model/user.rb def after_destroy if User.count.zero? [...]

(阅读更多精彩内容...)
十一 28

带着restful_authentication运行rspec时,貌似cookies无效的问题

2008年十一月28日,星期五,下午 2:02 | 分类:tech | 给我留言(1 条留言) |

起因:在未做自己开发rspec的时候,只是调试下安装完 restful_authentication 的rspec和部分test时候,出现了几个错误: 1、 Spec::Mocks::MockExpectationError in ‘SessionsController Logging in by cookie fails cookie login with bad cookie’ fails cookie login with bad cookie(Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_4) expected :cookies with (any args) once, but received it 0 times ./spec/controllers/authenticated_system_spec.rb:85: 2、 ‘SessionsController Logging in by cookie logs in with cookie’ FAILED expected true, got false ./spec/controllers/authenticated_system_spec.rb:81: 3、 ‘AccessControlTestController requesting xml; [...]

(阅读更多精彩内容...)
十一 28

在windows和netbeans6.5上,准备Rspce开发

2008年十一月28日,星期五,上午 8:08 | 分类:tech | 给我留言 |

一、环境 ruby -v >> ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] rails -v >> Rails 2.1.2 二、需要安装的gem和plugin gem install ZenTest 因为我的Rails是2.1.2,所以在安装plugin时,用了下面的方法: ruby script/plugin install git://github.com/dchelimsky/rspec.git ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git ruby script/generate rspec 另外还有一些辅助的工具,不在此详述 三、出现的问题 1、netbeans加载autotest时候的环境变量 解决:在系统环境中,需要加入home=当前项目的根文件夹,这样nb就能正常启用autotest了 2、restful_authentication的rspec时,出现mysql的Mysql::Error: Incorrect datetime value错误 mysql配置文件my.ini中,注释掉 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 一行(我的在87行) 下面添加一行:sql-mode=”” 重启mysql 四:参考文章 RubyTesting The Basics of Creating Rails Plugins,创建Rails插件的基础教程 RSpec的很重要的中文文档: http://www.letrails.cn/archives/20 http://www.letrails.cn/archives/advanced-rspec-tutorials-rspec-scaffold [...]

(阅读更多精彩内容...)
十一 28

重读AWDWR笔记

2008年十一月28日,星期五,上午 6:06 | 分类:tech | 给我留言 |

感恩节放假,抓紧时间重读一下AWDWR把一些知识点记录如下。 第6章 迁移习惯 create 来创建表,add 给现有表增加字段。你可以会看到 002_add_price.rb 的迁移。 model 中验证方法设置为 protected 是因为该方法必须在特定的模型上下文中调用,不能在外部调用。 protected def validate errors.add(:price, “should be at least 0.01″) if price.nil? || price < 0.01 end errors.add() 方法第一个参数是字段名称,第二个参数是出错信息的正文。 在将价格和 0.01 比较之前,先检查它是不是 nil。试图将 nil 和数字比较会引发异常。 下面代码演示了如何用正则表达式验证模型属性。 validates_format_of :image_url, :with => %r{\.(gif|jpg|png)$}i, :message => “must be a URL for a GIF, JPG, or PNG image” [...]

(阅读更多精彩内容...)
十一 27

1.3.3 Continuations

2008年十一月27日,星期四,下午 12:12 | 分类:Advanced Rails | 给我留言 |

Continuations 是一种非常强大的控制流机制。一个 Continuation 代表了调用栈和词法变量的特定状态。它是 Ruby 代码执行过程中特定点的一个快照。不幸的是,在 Ruby1.8 的实现中 Continuations 是如此的慢以至于对于许多的应用来说根本无法使用。在即将到来的 Ruby1.9 虚拟机中情况可能会有所改善,但最好不要期望在使用了 Ruby1.8 的 Continuation 的情况下能够获得好的性能。尽管如此,Continuations 仍然是非常有用的概念,基于 Continuations 的 web 框架提供了 Rails 的一些有趣的选择,因此在这里我们会对它们做一下考察。 Continuations之所以非常强大有下面几个原因: Continuations其实就是一些对象;它们可以被传递在函数之间。 可以从任何位置调用Continuations。只要持有对Continuation的引用,就可以对其进行调用。 Continuations是可重入的。可以使用Continuations从一个函数多次返回。 Continuations常常被描述为“结构化的GOTO“。因此,它们应该像任何类型的GOTO概念一样被谨慎的对待。在应用代码中不应该出现或者应该极少出现Continuations;它们通常应该被封装在库文件中。我不这么说是因为我认为开发人员应该被与它们隔离开来。 Continuations是如此普遍的一个概念,以至于通常来说在其之上建立抽象比直接使用它更合理。程序员在构建应用软件的时候应考虑使用”外部迭代(external iterator)“或者”协同程序(coroutine)“(两个都是在Continuations之上的抽象)而不是”continuation“。 SeaSide是一个基于Continuations的Smalltalk Web应用框架。Continuations 在SeaSide 中用于管理会话状态。每个用户的会话都对应一个服务器端的Continuation。当一个请求到达的时候Continuation将被调用而且更多的代码被执行。其结果是整个的事务能够被编写为单独的一段代码流,即使它们跨越了多个HTTP请求。这种能力是由于Smalltalk的Continuation能够被序列化;它们可以被写到一个数据库或者文件系统,然后被取出和反序列化,并在请求中重新调用。Ruby的Continuation不能被序列化。在Ruby中,Continuation只能被装载到内存中而不能被转换为一个字节流。 Borges(http://borges.rubyforge.org/)是直接移植到Ruby的Seaside 2实现。SeaSide与Borges的最根本的区别就是Borges必须将所有当前的Continuations保存在内存中,因为它们不能被序列化。这个巨大的限制很不幸地阻止了Borges在任何规模的Web应用中被成功使用。只要Continuation在任何一种Ruby实现中被支持,这个限制就可以被克服了。 Continuation的能力可以通过下面的Borges示例代码来见证,它用于渲染在线商店的一系列条目: class SushiNet::StoreItemList < Borges::Component def choose(item) call SushiNet::StoreItemView.new(item) end def initialize(items) @batcher = Borges::BatchedList.new items, 8 end def [...]

(阅读更多精彩内容...)
十一 27

ruby for rails 摘录

2008年十一月27日,星期四,上午 8:08 | 分类:tech | 给我留言 |

if 关键字 if condition # code here, executed if condition evaluates to true. end if x > 100 then puts x end if x > 100; puts x end if condition # code executed if condition is true. else # code executed if conditions is false. end if condition1 # code executed if condition1 is [...]

(阅读更多精彩内容...)
十一 17

ruby for rails 摘录

2008年十一月17日,星期一,上午 7:07 | 分类:tech | 给我留言 |

class, module, def 标志着切换到新的 self, main 是默认的 self 对象用来引用自己的专门术语。self 作为消息默认的接受者,如果消息接受者是 self ,可以省略接受者和圆点。 如果存在同名的方法名和变量,而且你使用裸词标识符,那么变量具有优先权。要强制 Ruby 将标识符当作方法名,你必须使用 self.talk 或者用参数列表为空的 talk() 来调用方法。 有一个场合,即使是发送消息给当前的 self,也必须使用完整的“对象 圆点 消息”记法,那就是在调用写方法的时候。因为 Ruby 总之将序列“裸词=值”解释为对局部变量的赋值。为了调用当前对象的 venue= 方法,必须显示的给出 self。 private 和 protected 的区别 私有方法意味着该方法不能使用显式的接收者来调用。Ruby 认为你想要发送消息给当前对象 self。所以仅当 self 是一个可以响应消息的对象时,该消息才有对象接收。那啥时候 self 才会是类的实例呢?当执行类的任何一个实例方法时。所以看如下代码 class Baker def bake_cake @batter = [] pour_flour add_egg return Cake.new end def pour_flour @batter.push(Flour.new) end [...]

(阅读更多精彩内容...)
  • 信息发布
  • 最新留言
  • 热评日志
我的2010,新的开始啦

稍后把团队的介绍放上,呵呵。
关于 里克
里克:本名李伟,全职SOHO开发,技术顾问
长春互联 技术总监
邮件:liwei@echangchun.net
QQ:5175486
MSN:liwei78@live.com
某高潜力SNS网站团队成员
对iphone和android的开发很感兴趣